From 04ac4751701a28b7bec0c812a98d8a7ca1008a69 Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Wed, 31 Oct 2018 19:18:41 +0700 Subject: sock_events.c: also track child file descriptors In some applications, such as OsmocomBB, a single UNIX socket can be used by multiple processes (i.e. a server and multiple clients). Previously this caused a segmentation fault. Let's modify both sock_ev_accept() and sock_ev_accept4() in order to handle such connections properly, by using both socket path and dissector from the parent. --- sock_events.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'sock_events.c') diff --git a/sock_events.c b/sock_events.c index 9340d7d..a2b4108 100644 --- a/sock_events.c +++ b/sock_events.c @@ -85,7 +85,8 @@ void sock_ev_accept(int fd, int ret, int err, struct sockaddr *addr, { if (ret < 0) return; - udtrace_add_fd(ret); + LOG("accept(fd=%d on parent fd=%d)\n", ret, fd); + udtrace_add_fd_child(fd, ret); } void sock_ev_accept4(int fd, int ret, int err, struct sockaddr *addr, @@ -93,7 +94,8 @@ void sock_ev_accept4(int fd, int ret, int err, struct sockaddr *addr, { if (ret < 0) return; - udtrace_add_fd(ret); + LOG("accept(fd=%d on parent fd=%d)\n", ret, fd); + udtrace_add_fd_child(fd, ret); } void sock_ev_send(int fd, int ret, int err, const void *buf, size_t bytes, -- cgit v1.2.3