我正在尝试监控unix套接字("/tmp/mysocket")。
我可以在Node.js中很好地做到这一点:当1)套接字被绑定,2)有人连接到套接字,3)数据被发送到套接字,4)套接字断开连接时,它会引发一个事件。
我现在正尝试用C/C++来做这件事:我想监控"/tmp/mysocket“中的上述事件。我已经查看了libevent (我更喜欢使用它),但是发现它需要一个IP:port。有什么方法可以监控unix套接字吗?
或者有没有人能推荐另一种C/C++解决方案?
发布于 2012-01-27 18:06:39
您可以像监视常规文件一样监视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应该是类似的。
https://stackoverflow.com/questions/9031377
复制相似问题