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