c++ - 带有 libevent/libev : monitor a unix socket 的 C 或 C++

标签 c++ c libevent libev

我正在尝试监控一个 unix 套接字(“/tmp/mysocket”)。

我可以在 Node.js 中很好地做到这一点:当 1) 套接字被绑定(bind),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应该是类似的

关于c++ - 带有 libevent/libev : monitor a unix socket 的 C 或 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9031377/

相关文章:

C++模板方法,基于模板类改变行为

c++ - C/C++ 中的字符串化运算符

c - 文件删除/修改期间的 libevent

c++ - EXC_BAD_ACCESS,访问指针 vector 指向的对象时

c++ - 什么是 std::pair?

c++ - 如何解析这些未知大小的数据

c - 使用 avcodec_decode_audio4 解码 FLAC 文件效果不佳

c++ - 共享库中是否应该避免使用静态成员函数?

c++ - 使用 libevent 回调成员函数

c++ - 如何使用libevent检测文件锁何时释放?