diff -Nru udev-177.orig/src/udev-ctrl.c udev-177/src/udev-ctrl.c --- udev-177.orig/src/udev-ctrl.c 2012-01-10 01:43:22.125518772 +0100 +++ udev-177/src/udev-ctrl.c 2012-01-22 16:46:31.339378651 +0100 @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -182,6 +183,7 @@ struct ucred ucred; socklen_t slen; const int on = 1; + int flgs; conn = calloc(1, sizeof(struct udev_ctrl_connection)); if (conn == NULL) @@ -189,13 +191,18 @@ conn->refcount = 1; conn->uctrl = uctrl; - conn->sock = accept4(uctrl->sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK); + conn->sock = accept(uctrl->sock, NULL, NULL); if (conn->sock < 0) { if (errno != EINTR) err(uctrl->udev, "unable to receive ctrl connection: %m\n"); goto err; } + /* Since we don't have accept4 */ + flgs = fcntl(conn->sock, F_GETFL, NULL); + if (flgs >= 0) fcntl(conn->sock, F_SETFL, flgs | O_NONBLOCK); + fcntl(conn->sock, F_SETFD, FD_CLOEXEC); + /* check peer credential of connection */ slen = sizeof(ucred); if (getsockopt(conn->sock, SOL_SOCKET, SO_PEERCRED, &ucred, &slen) < 0) {