netbsd: NetBSD ships with paccept(2) a superset of Linux-specific accept4()
authorKamil Rytarowski <n54@gmx.com>
Sat, 21 Nov 2015 22:08:23 +0000 (23:08 +0100)
committerDavid Henningsson <david.henningsson@canonical.com>
Fri, 27 Nov 2015 08:52:10 +0000 (09:52 +0100)
[diwic: Moved paccept to #bsd line in configure.ac]

configure.ac
src/pulsecore/core-util.c

index 003673e..abfb8d9 100644 (file)
@@ -569,7 +569,7 @@ AC_CHECK_FUNCS_ONCE([ctime_r usleep])
 AC_CHECK_FUNCS_ONCE([strerror_r])
 
 # BSD
-AC_CHECK_FUNCS_ONCE([lstat])
+AC_CHECK_FUNCS_ONCE([lstat paccept])
 
 # Non-standard
 AC_CHECK_FUNCS_ONCE([setresuid setresgid setreuid setregid seteuid setegid ppoll strsignal sig2str strtod_l pipe2 accept4])
index 2099686..b5ddd3d 100644 (file)
@@ -3501,6 +3501,8 @@ finish:
 int pa_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
     int fd;
 
+    errno = 0;
+
 #ifdef HAVE_ACCEPT4
     if ((fd = accept4(sockfd, addr, addrlen, SOCK_CLOEXEC)) >= 0)
         goto finish;
@@ -3510,6 +3512,11 @@ int pa_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
 
 #endif
 
+#ifdef HAVE_PACCEPT
+    if ((fd = paccept(sockfd, addr, addrlen, NULL, SOCK_CLOEXEC)) >= 0)
+        goto finish;
+#endif
+
     if ((fd = accept(sockfd, addr, addrlen)) >= 0)
         goto finish;