Fall back to accept() on systems where accept4() is not implemented.
authorSamuel Rødal <samuel.rodal@nokia.com>
Mon, 30 May 2011 15:23:40 +0000 (17:23 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 31 May 2011 19:14:14 +0000 (15:14 -0400)
wayland/wayland-server.c

index d30df5b..886ec69 100644 (file)
@@ -703,8 +703,14 @@ socket_data(int fd, uint32_t mask, void *data)
        length = sizeof name;
        client_fd =
                accept4(fd, (struct sockaddr *) &name, &length, SOCK_CLOEXEC);
+       if (client_fd < 0 && errno == ENOSYS) {
+               client_fd = accept(fd, (struct sockaddr *) &name, &length);
+               if (client_fd >= 0 && fcntl(client_fd, F_SETFD, FD_CLOEXEC) == -1)
+                       fprintf(stderr, "failed to set FD_CLOEXEC flag on client fd, errno: %d\n", errno);
+       }
+
        if (client_fd < 0)
-               fprintf(stderr, "failed to accept\n");
+               fprintf(stderr, "failed to accept, errno: %d\n", errno);
 
        wl_client_create(display, client_fd);