summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Rødal <samuel.rodal@nokia.com>2011-05-30 17:23:40 +0200
committerKristian Høgsberg <krh@bitplanet.net>2011-05-31 15:14:14 -0400
commit02e1ffdefef7b3e3dd82198a0f2f7503e7883e9b (patch)
tree2922f1be9e5547d947a5c2daf099c6831c2928e4
parentb06e891e4ca47278f2712dfba804fc169db39f9a (diff)
Fall back to accept() on systems where accept4() is not implemented.
-rw-r--r--wayland/wayland-server.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/wayland/wayland-server.c b/wayland/wayland-server.c
index d30df5b..886ec69 100644
--- a/wayland/wayland-server.c
+++ b/wayland/wayland-server.c
@@ -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);