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