#define SOCKET_FLAGS_PRIV #include #ifdef NEED_SOCKET_FLAGS #include int _socket(int domain, int type, int protocol) { int s = socket(domain, type & ~(SOCK_CLOEXEC | SOCK_NONBLOCK), protocol); int flags; if (s == -1) return s; if (type & SOCK_CLOEXEC) { flags = fcntl(s, F_GETFD); fcntl(s, F_SETFD, flags | FD_CLOEXEC); } if (type & SOCK_NONBLOCK) { flags = fcntl(s, F_GETFL); fcntl(s, F_SETFL, flags | O_NONBLOCK); } return s; } int _socketpair(int domain, int type, int protocol, int socket_vector[2]) { int rc = socketpair(domain, type & ~(SOCK_CLOEXEC | SOCK_NONBLOCK), protocol, socket_vector); int flags, i; if (rc == -1) return rc; for (i = 0; i < 2; i++) { if (type & SOCK_CLOEXEC) { flags = fcntl(socket_vector[i], F_GETFD); fcntl(socket_vector[i], F_SETFD, flags | FD_CLOEXEC); } if (type & SOCK_NONBLOCK) { flags = fcntl(socket_vector[i], F_GETFL); fcntl(socket_vector[i], F_SETFL, flags | O_NONBLOCK); } } return rc; } #endif