1
- # /*
1
+ /*
2
2
*
3
3
* Copyright (c) 2020 Project CHIP Authors
4
4
*
17
17
18
18
/**
19
19
* @file
20
- * This header file defines BSD socket API functions which for various
21
- * reasons have not (yet) been implemented or exposed in Zephyr.
20
+ * This header file includes Zephyr socket header and implements POSIX wrappers for APIs with
21
+ * `zsock_` prefix if necessary. It also defines BSD socket API functions which for various
22
+ * reasons have not been implemented or exposed in older Zephyr version.
22
23
*/
23
24
24
25
#pragma once
25
26
26
- #if CHIP_SYSTEM_CONFIG_USE_POSIX_SOCKETS
27
- #include <sys/select.h>
28
- #endif
29
-
30
27
#if CHIP_SYSTEM_CONFIG_USE_ZEPHYR_SOCKETS
31
28
#include <zephyr/net/socket.h>
32
29
#endif
33
30
31
+
32
+ #if CHIP_SYSTEM_CONFIG_USE_ZEPHYR_SOCKET_EXTENSIONS
33
+
34
+ #if CHIP_SYSTEM_CONFIG_USE_POSIX_SOCKETS
35
+ #include <sys/select.h>
36
+ #endif
37
+
34
38
static inline ssize_t recvmsg (int sock , struct msghdr * msg , int flags )
35
39
{
36
- // Zephyr doesn't implement recvmsg at all, but if the message vector size is > 0 we can simply
40
+ // Older Zephyr version doesn't implement recvmsg at all, but if the message vector size is > 0 we can simply
37
41
// translate recvmsg to recvfrom which fills only the first of the provided buffers (although
38
42
// we don't get control messages in such a case).
39
43
@@ -51,3 +55,241 @@ static inline ssize_t recvmsg(int sock, struct msghdr * msg, int flags)
51
55
52
56
return ret ;
53
57
}
58
+
59
+ #endif // CHIP_SYSTEM_CONFIG_USE_ZEPHYR_SOCKET_EXTENSIONS
60
+
61
+ #if CHIP_SYSTEM_CONFIG_USE_ZEPHYR_SOCKET_NAMES
62
+ extern "C" {
63
+
64
+ /** POSIX wrapper for @ref zsock_fd_set */
65
+ #define fd_set zsock_fd_set
66
+ /** POSIX wrapper for @ref ZSOCK_FD_SETSIZE */
67
+ #define FD_SETSIZE ZSOCK_FD_SETSIZE
68
+
69
+ /** POSIX wrapper for @ref ZSOCK_FD_ZERO */
70
+ static inline void FD_ZERO (zsock_fd_set * set )
71
+ {
72
+ ZSOCK_FD_ZERO (set );
73
+ }
74
+
75
+ /** POSIX wrapper for @ref ZSOCK_FD_ISSET */
76
+ static inline int FD_ISSET (int fd , zsock_fd_set * set )
77
+ {
78
+ return ZSOCK_FD_ISSET (fd , set );
79
+ }
80
+
81
+ /** POSIX wrapper for @ref ZSOCK_FD_CLR */
82
+ static inline void FD_CLR (int fd , zsock_fd_set * set )
83
+ {
84
+ ZSOCK_FD_CLR (fd , set );
85
+ }
86
+
87
+ /** POSIX wrapper for @ref ZSOCK_FD_SET */
88
+ static inline void FD_SET (int fd , zsock_fd_set * set )
89
+ {
90
+ ZSOCK_FD_SET (fd , set );
91
+ }
92
+
93
+ /** POSIX wrapper for @ref zsock_select */
94
+ static inline int select (int nfds , zsock_fd_set * readfds , zsock_fd_set * writefds , zsock_fd_set * exceptfds ,
95
+ struct timeval * timeout )
96
+ {
97
+ return zsock_select (nfds , readfds , writefds , exceptfds , timeout );
98
+ }
99
+
100
+ /** POSIX wrapper for @ref zsock_pollfd */
101
+ #define pollfd zsock_pollfd
102
+
103
+ /** POSIX wrapper for @ref zsock_socket */
104
+ static inline int socket (int family , int type , int proto )
105
+ {
106
+ return zsock_socket (family , type , proto );
107
+ }
108
+
109
+ /** POSIX wrapper for @ref zsock_socketpair */
110
+ static inline int socketpair (int family , int type , int proto , int sv [2 ])
111
+ {
112
+ return zsock_socketpair (family , type , proto , sv );
113
+ }
114
+
115
+ /** POSIX wrapper for @ref zsock_close */
116
+ static inline int close (int sock )
117
+ {
118
+ return zsock_close (sock );
119
+ }
120
+
121
+ /** POSIX wrapper for @ref zsock_shutdown */
122
+ static inline int shutdown (int sock , int how )
123
+ {
124
+ return zsock_shutdown (sock , how );
125
+ }
126
+
127
+ /** POSIX wrapper for @ref zsock_bind */
128
+ static inline int bind (int sock , const struct sockaddr * addr , socklen_t addrlen )
129
+ {
130
+ return zsock_bind (sock , addr , addrlen );
131
+ }
132
+
133
+ /** POSIX wrapper for @ref zsock_connect */
134
+ static inline int connect (int sock , const struct sockaddr * addr , socklen_t addrlen )
135
+ {
136
+ return zsock_connect (sock , addr , addrlen );
137
+ }
138
+
139
+ /** POSIX wrapper for @ref zsock_listen */
140
+ static inline int listen (int sock , int backlog )
141
+ {
142
+ return zsock_listen (sock , backlog );
143
+ }
144
+
145
+ /** POSIX wrapper for @ref zsock_accept */
146
+ static inline int accept (int sock , struct sockaddr * addr , socklen_t * addrlen )
147
+ {
148
+ return zsock_accept (sock , addr , addrlen );
149
+ }
150
+
151
+ /** POSIX wrapper for @ref zsock_send */
152
+ static inline ssize_t send (int sock , const void * buf , size_t len , int flags )
153
+ {
154
+ return zsock_send (sock , buf , len , flags );
155
+ }
156
+
157
+ /** POSIX wrapper for @ref zsock_recv */
158
+ static inline ssize_t recv (int sock , void * buf , size_t max_len , int flags )
159
+ {
160
+ return zsock_recv (sock , buf , max_len , flags );
161
+ }
162
+
163
+ /** POSIX wrapper for @ref zsock_sendto */
164
+ static inline ssize_t sendto (int sock , const void * buf , size_t len , int flags , const struct sockaddr * dest_addr ,
165
+ socklen_t addrlen )
166
+ {
167
+ return zsock_sendto (sock , buf , len , flags , dest_addr , addrlen );
168
+ }
169
+
170
+ /** POSIX wrapper for @ref zsock_sendmsg */
171
+ static inline ssize_t sendmsg (int sock , const struct msghdr * message , int flags )
172
+ {
173
+ return zsock_sendmsg (sock , message , flags );
174
+ }
175
+
176
+ /** POSIX wrapper for @ref zsock_recvfrom */
177
+ static inline ssize_t recvfrom (int sock , void * buf , size_t max_len , int flags , struct sockaddr * src_addr , socklen_t * addrlen )
178
+ {
179
+ return zsock_recvfrom (sock , buf , max_len , flags , src_addr , addrlen );
180
+ }
181
+
182
+ /** POSIX wrapper for @ref zsock_recvmsg */
183
+ static inline ssize_t recvmsg (int sock , struct msghdr * msg , int flags )
184
+ {
185
+ return zsock_recvmsg (sock , msg , flags );
186
+ }
187
+
188
+ /** POSIX wrapper for @ref zsock_poll */
189
+ static inline int poll (struct zsock_pollfd * fds , int nfds , int timeout )
190
+ {
191
+ return zsock_poll (fds , nfds , timeout );
192
+ }
193
+
194
+ /** POSIX wrapper for @ref zsock_getsockopt */
195
+ static inline int getsockopt (int sock , int level , int optname , void * optval , socklen_t * optlen )
196
+ {
197
+ return zsock_getsockopt (sock , level , optname , optval , optlen );
198
+ }
199
+
200
+ /** POSIX wrapper for @ref zsock_setsockopt */
201
+ static inline int setsockopt (int sock , int level , int optname , const void * optval , socklen_t optlen )
202
+ {
203
+ return zsock_setsockopt (sock , level , optname , optval , optlen );
204
+ }
205
+
206
+ /** POSIX wrapper for @ref zsock_getpeername */
207
+ static inline int getpeername (int sock , struct sockaddr * addr , socklen_t * addrlen )
208
+ {
209
+ return zsock_getpeername (sock , addr , addrlen );
210
+ }
211
+
212
+ /** POSIX wrapper for @ref zsock_getsockname */
213
+ static inline int getsockname (int sock , struct sockaddr * addr , socklen_t * addrlen )
214
+ {
215
+ return zsock_getsockname (sock , addr , addrlen );
216
+ }
217
+
218
+ /** POSIX wrapper for @ref zsock_getaddrinfo */
219
+ static inline int getaddrinfo (const char * host , const char * service , const struct zsock_addrinfo * hints ,
220
+ struct zsock_addrinfo * * res )
221
+ {
222
+ return zsock_getaddrinfo (host , service , hints , res );
223
+ }
224
+
225
+ /** POSIX wrapper for @ref zsock_freeaddrinfo */
226
+ static inline void freeaddrinfo (struct zsock_addrinfo * ai )
227
+ {
228
+ zsock_freeaddrinfo (ai );
229
+ }
230
+
231
+ /** POSIX wrapper for @ref zsock_gai_strerror */
232
+ static inline const char * gai_strerror (int errcode )
233
+ {
234
+ return zsock_gai_strerror (errcode );
235
+ }
236
+
237
+ /** POSIX wrapper for @ref zsock_getnameinfo */
238
+ static inline int getnameinfo (const struct sockaddr * addr , socklen_t addrlen , char * host , socklen_t hostlen , char * serv ,
239
+ socklen_t servlen , int flags )
240
+ {
241
+ return zsock_getnameinfo (addr , addrlen , host , hostlen , serv , servlen , flags );
242
+ }
243
+
244
+ /** POSIX wrapper for @ref zsock_addrinfo */
245
+ #define addrinfo zsock_addrinfo
246
+
247
+ /** POSIX wrapper for @ref zsock_gethostname */
248
+ static inline int gethostname (char * buf , size_t len )
249
+ {
250
+ return zsock_gethostname (buf , len );
251
+ }
252
+
253
+ /** POSIX wrapper for @ref zsock_inet_pton */
254
+ static inline int inet_pton (sa_family_t family , const char * src , void * dst )
255
+ {
256
+ return zsock_inet_pton (family , src , dst );
257
+ }
258
+
259
+ /** POSIX wrapper for @ref zsock_inet_ntop */
260
+ static inline char * inet_ntop (sa_family_t family , const void * src , char * dst , size_t size )
261
+ {
262
+ return zsock_inet_ntop (family , src , dst , size );
263
+ }
264
+
265
+ /** POSIX wrapper for @ref ZSOCK_POLLIN */
266
+ #define POLLIN ZSOCK_POLLIN
267
+ /** POSIX wrapper for @ref ZSOCK_POLLOUT */
268
+ #define POLLOUT ZSOCK_POLLOUT
269
+ /** POSIX wrapper for @ref ZSOCK_POLLERR */
270
+ #define POLLERR ZSOCK_POLLERR
271
+ /** POSIX wrapper for @ref ZSOCK_POLLHUP */
272
+ #define POLLHUP ZSOCK_POLLHUP
273
+ /** POSIX wrapper for @ref ZSOCK_POLLNVAL */
274
+ #define POLLNVAL ZSOCK_POLLNVAL
275
+
276
+ /** POSIX wrapper for @ref ZSOCK_MSG_PEEK */
277
+ #define MSG_PEEK ZSOCK_MSG_PEEK
278
+ /** POSIX wrapper for @ref ZSOCK_MSG_CTRUNC */
279
+ #define MSG_CTRUNC ZSOCK_MSG_CTRUNC
280
+ /** POSIX wrapper for @ref ZSOCK_MSG_TRUNC */
281
+ #define MSG_TRUNC ZSOCK_MSG_TRUNC
282
+ /** POSIX wrapper for @ref ZSOCK_MSG_DONTWAIT */
283
+ #define MSG_DONTWAIT ZSOCK_MSG_DONTWAIT
284
+ /** POSIX wrapper for @ref ZSOCK_MSG_WAITALL */
285
+ #define MSG_WAITALL ZSOCK_MSG_WAITALL
286
+
287
+ /** POSIX wrapper for @ref ZSOCK_SHUT_RD */
288
+ #define SHUT_RD ZSOCK_SHUT_RD
289
+ /** POSIX wrapper for @ref ZSOCK_SHUT_WR */
290
+ #define SHUT_WR ZSOCK_SHUT_WR
291
+ /** POSIX wrapper for @ref ZSOCK_SHUT_RDWR */
292
+ #define SHUT_RDWR ZSOCK_SHUT_RDWR
293
+
294
+ } // extern "C"
295
+ #endif // CHIP_SYSTEM_CONFIG_USE_ZEPHYR_SOCKET_NAMES
0 commit comments