xref: /aosp_15_r20/external/musl/src/network/socket.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include <sys/socket.h>
2*c9945492SAndroid Build Coastguard Worker #include <fcntl.h>
3*c9945492SAndroid Build Coastguard Worker #include <errno.h>
4*c9945492SAndroid Build Coastguard Worker #include "syscall.h"
5*c9945492SAndroid Build Coastguard Worker 
socket(int domain,int type,int protocol)6*c9945492SAndroid Build Coastguard Worker int socket(int domain, int type, int protocol)
7*c9945492SAndroid Build Coastguard Worker {
8*c9945492SAndroid Build Coastguard Worker 	int s = __socketcall(socket, domain, type, protocol, 0, 0, 0);
9*c9945492SAndroid Build Coastguard Worker 	if ((s==-EINVAL || s==-EPROTONOSUPPORT)
10*c9945492SAndroid Build Coastguard Worker 	    && (type&(SOCK_CLOEXEC|SOCK_NONBLOCK))) {
11*c9945492SAndroid Build Coastguard Worker 		s = __socketcall(socket, domain,
12*c9945492SAndroid Build Coastguard Worker 			type & ~(SOCK_CLOEXEC|SOCK_NONBLOCK),
13*c9945492SAndroid Build Coastguard Worker 			protocol, 0, 0, 0);
14*c9945492SAndroid Build Coastguard Worker 		if (s < 0) return __syscall_ret(s);
15*c9945492SAndroid Build Coastguard Worker 		if (type & SOCK_CLOEXEC)
16*c9945492SAndroid Build Coastguard Worker 			__syscall(SYS_fcntl, s, F_SETFD, FD_CLOEXEC);
17*c9945492SAndroid Build Coastguard Worker 		if (type & SOCK_NONBLOCK)
18*c9945492SAndroid Build Coastguard Worker 			__syscall(SYS_fcntl, s, F_SETFL, O_NONBLOCK);
19*c9945492SAndroid Build Coastguard Worker 	}
20*c9945492SAndroid Build Coastguard Worker 	return __syscall_ret(s);
21*c9945492SAndroid Build Coastguard Worker }
22