簡體   English   中英

具有libevent / libev的C或C ++:監視UNIX套接字

[英]C or C++ with libevent/libev: monitor a unix socket

我正在嘗試監視Unix套接字(“ / tmp / mysocket”)。

我可以在Node.js中做到這一點:當1)綁定套接字,2)有人連接到套接字,3)數據發送到套接字以及4)套接字斷開連接時,它將引發一個事件。

我現在嘗試在C / C ++中執行此操作:我想監視“ / tmp / mysocket”以上事件。 我看過libevent(我最好使用它),但是看到它需要一個IP:port。 有什么辦法可以監視Unix套接字?

還是有人可以建議其他C / C ++解決方案?

您可以像常規文件一樣監視UNIX域套接字,因為它可以像文件一樣操作,例如在libev,

struct sockaddr_un address;
memset(&address, 0, sizeof(address));
address.sun_family = AF_LOCAL;
strcpy(address.sun_path, "/tmp/mysocket");

bind(socket, (struct sockaddr*)(&address), sizeof(address));
listen(socket, 5);

// now listen if someone has connected to the socket.
// we use 'ev_io' since the 'socket' can be treated as a file descriptor.
struct ev_io* io = malloc(sizeof(ev_io));
ev_io_init(io, accept_cb, socket, EV_READ);
ev_io_start(loop, io);
...

void accept_cb(struct ev_loop* loop, struct ev_io* io, int r)
{
    // someone has connected. we accept the child.
    struct sockaddr_un client_address;
    socklen_t client_address_len = sizeof(client_address);
    int client_fd = accept(socket, (sockaddr*)(&client_address),
                           &client_address_len);

    // 'read' / 'recv' from client_fd here.
    // or use another 'ev_io' for async read.
}

libevent應該相似。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM