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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
/*
*
* Copyright (c) 2018 Huawei Technologies Co.,Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _API_H_
#define _API_H_
#if defined(NSOCKET)
#define VERSION_NAME "NSTACK"
#define _socket nstack_socket
#define _fcntl nstack_fcntl
#define _bind nstack_bind
#define _listen nstack_listen
#define _accept nstack_accept
#define _accept4 nstack_accept4
#define _connect nstack_connect
#define _close nstack_close
#define _shutdown nstack_shutdown
#define _recv nstack_recv
#define _send nstack_send
#define _getsockname nstack_getsockname
#define _getpeername nstack_getpeername
#define _getsockopt nstack_getsockopt
#define _setsockopt nstack_setsockopt
#define _recvfrom nstack_recvfrom
#define _sendto nstack_sendto
#define _read nstack_read
#define _write nstack_write
#define _epoll_create nstack_epoll_create
#define _epoll_ctl nstack_epoll_ctl
#define _epoll_wait nstack_epoll_wait
#elif defined(LWIP)
#define VERSION_NAME "LWIP"
#define _socket lwip_socket
#define _fcntl lwip_fcntl
#define _bind lwip_bind
#define _listen lwip_listen
#define _accept lwip_accept
#define _accept4 lwip_accept4
#define _connect lwip_connect
#define _close lwip_close
#define _shutdown lwip_shutdown
#define _recv lwip_recv
#define _send lwip_send
#define _getsockname lwip_getsockname
#define _getpeername lwip_getpeername
#define _getsockopt lwip_getsockopt
#define _setsockopt lwip_setsockopt
#define _recvfrom lwip_recvfrom
#define _sendto lwip_sendto
#define _read lwip_read
#define _write lwip_write
#define _epoll_create lwip_epoll_create
#define _epoll_ctl lwip_epoll_ctl
#define _epoll_wait lwip_epoll_wait
#else
#define VERSION_NAME "POSIX"
#define _socket socket
#define _fcntl fcntl
#define _bind bind
#define _listen listen
#define _accept accept
#define _accept4 accept4
#define _connect connect
#define _close close
#define _shutdown shutdown
#define _recv recv
#define _send send
#define _getsockname getsockname
#define _getpeername getpeername
#define _getsockopt getsockopt
#define _setsockopt setsockopt
#define _recvfrom recvfrom
#define _sendto sendto
#define _read read
#define _write write
#define _epoll_create epoll_create
#define _epoll_ctl epoll_ctl
#define _epoll_wait epoll_wait
#endif
#endif /* #ifndef _API_H_ */
#ifndef SOCKET_WARP_LB_H_
#define SOCKET_WARP_LB_H_
inline static int
set_nonblock_v (int fd, int nonblock)
{
int fl = _fcntl (fd, F_GETFL, 0);
if (fl < 0)
return fl;
if (nonblock)
{
if (fl & O_NONBLOCK)
return 0;
fl |= O_NONBLOCK;
}
else
{
if (0 == (fl & O_NONBLOCK))
return 0;
fl &= ~(O_NONBLOCK);
}
return _fcntl (fd, F_SETFL, fl | O_NONBLOCK);
}
inline static int
set_nonblock (int fd)
{
int fl = _fcntl (fd, F_GETFL, 0);
if (fl < 0)
return fl;
return _fcntl (fd, F_SETFL, fl | O_NONBLOCK);
}
inline static int
set_nodelay (int fd, int nodelay)
{
return _setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, (void *) &nodelay,
sizeof (nodelay));
}
inline static int
set_rcvtimeo (int fd, int us)
{
struct timeval timeout = {.tv_sec = us / USOFS,.tv_usec = us % USOFS };
return _setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, &timeout,
sizeof (timeout));
}
inline static int
set_reuseaddr (int fd, int reuseaddr)
{
return _setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (char *) &reuseaddr,
sizeof (reuseaddr));
}
inline static int
set_reuseport (int fd, int reuseport)
{
return _setsockopt (fd, SOL_SOCKET, SO_REUSEPORT, (char *) &reuseport,
sizeof (reuseport));
}
inline static int
set_sndtimeo (int fd, int us)
{
struct timeval timeout = {.tv_sec = us / USOFS,.tv_usec = us % USOFS };
return _setsockopt (fd, SOL_SOCKET, SO_SNDTIMEO, &timeout,
sizeof (timeout));
}
#endif /* #ifndef SOCKET_WARP_LB_H_ */
|