aboutsummaryrefslogtreecommitdiff
path: root/apps/nc/compat/socket.c
blob: fd699f9fd7dab4f38f382de97246dc5e00b38b27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#define SOCKET_FLAGS_PRIV

#include <sys/socket.h>

#ifdef NEED_SOCKET_FLAGS

#include <fcntl.h>

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;
}

#endif