C أو C ++ مع Libvent / Libev: مراقبة مقبس UNIX
سؤال
أحاول مراقبة مقبس UNIX ("/ TMP / mysocket").
يمكنني القيام بهذه الطريقة على ما يرام في Node.js: إنه يرفع حدثا عند 1) مقبس ملزم، 2) يتصل شخص ما بمقبس، 3) يتم إرسال البيانات إلى المقبس و 4) غير متصل بالمقبس.
أحاول الآن القيام بذلك في C / C ++: أريد مراقبة "/ TMP / Mysocket" للأحداث المذكورة أعلاه.لقد بحثت إلى Libvent (مما أفكي استخدامه)، ولكن انظر أنه يتطلب منفذ IP:.هل هناك أي طريقة لرصد مآخذ يونيكس؟
أو يمكن لأي شخص أن يقترح حلا آخر C / C ++؟
المحلول
You could monitor a UNIX domain socket just like a regular file, since it can be operated like a file, e.g. in 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 should be similar.
لا تنتمي إلى StackOverflow