diff --git a/lib/roken/roken.awk b/lib/roken/roken.awk index 4d263a5a8..47ae1960a 100644 --- a/lib/roken/roken.awk +++ b/lib/roken/roken.awk @@ -3,6 +3,12 @@ BEGIN { print "#include " print "#include " + print "#ifdef HAVE_SYS_TYPES_H" + print "#include " + print "#endif" + print "#ifdef HAVE_SYS_SOCKET_H" + print "#include " + print "#endif" print "" print "int main(int argc, char **argv)" print "{" diff --git a/lib/roken/roken.h.in b/lib/roken/roken.h.in index 33918d37b..bf0b2d37d 100644 --- a/lib/roken/roken.h.in +++ b/lib/roken/roken.h.in @@ -1036,6 +1036,7 @@ rk_qsort(void *, size_t, size_t, int (*)(const void *, const void *)); #if defined(__LINUX__) && SOCK_CLOEXEC && !defined(SOCKET_WRAPPER_REPLACE) #undef socket #define socket(_fam,_type,_prot) rk_socket(_fam,_type,_prot) +int ROKEN_LIB_FUNCTION rk_socket(int, int, int); #endif #ifdef SOCKET_WRAPPER_REPLACE diff --git a/lib/roken/socket.c b/lib/roken/socket.c index 121ebc1eb..bd800ac5a 100644 --- a/lib/roken/socket.c +++ b/lib/roken/socket.c @@ -317,6 +317,7 @@ socket_to_fd(rk_socket_t sock, int flags) } #ifndef HEIMDAL_SMALLER +#undef socket int rk_socket(int, int, int); @@ -326,8 +327,8 @@ rk_socket(int domain, int type, int protocol) int s; s = socket (domain, type, protocol); #ifdef SOCK_CLOEXEC - if ((SOCK_CLOEXEC & protocol) && s < 0 && errno == EINVAL) { - protocol &= ~SOCK_CLOEXEC; + if ((SOCK_CLOEXEC & type) && s < 0 && errno == EINVAL) { + type &= ~SOCK_CLOEXEC; s = socket (domain, type, protocol); } #endif diff --git a/lib/roken/version-script.map b/lib/roken/version-script.map index 0b2bdbec3..b67e82dc1 100644 --- a/lib/roken/version-script.map +++ b/lib/roken/version-script.map @@ -94,6 +94,7 @@ HEIMDAL_ROKEN_1.0 { rk_simple_execve_timed; rk_simple_execvp; rk_simple_execvp_timed; + rk_socket; rk_socket_addr_size; rk_socket_get_address; rk_socket_get_port;