1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2015-02-17     Bernard      First version
9  * 2018-05-17     ChenYong     Add socket abstraction layer
10  */
11 
12 #ifndef SYS_SOCKET_H_
13 #define SYS_SOCKET_H_
14 
15 #include <rtthread.h>
16 #include <sal_socket.h>
17 #ifdef SAL_USING_TLS
18 #include <sal_tls.h>
19 #endif
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #ifdef SAL_USING_POSIX
26 int accept(int s, struct sockaddr *addr, socklen_t *addrlen);
27 int bind(int s, const struct sockaddr *name, socklen_t namelen);
28 int shutdown(int s, int how);
29 int getpeername(int s, struct sockaddr *name, socklen_t *namelen);
30 int getsockname(int s, struct sockaddr *name, socklen_t *namelen);
31 int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
32 int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
33 int connect(int s, const struct sockaddr *name, socklen_t namelen);
34 int listen(int s, int backlog);
35 int recv(int s, void *mem, size_t len, int flags);
36 int recvfrom(int s, void *mem, size_t len, int flags,
37       struct sockaddr *from, socklen_t *fromlen);
38 int recvmsg(int s, struct msghdr *message, int flags);
39 int sendmsg(int s, const struct msghdr *message, int flags);
40 int send(int s, const void *dataptr, size_t size, int flags);
41 int sendto(int s, const void *dataptr, size_t size, int flags,
42     const struct sockaddr *to, socklen_t tolen);
43 int socket(int domain, int type, int protocol);
44 int closesocket(int s);
45 int ioctlsocket(int s, long cmd, void *arg);
46 int socketpair(int domain, int type, int protocol, int *fds);
47 #else
48 #define accept(s, addr, addrlen)                           sal_accept(s, addr, addrlen)
49 #define bind(s, name, namelen)                             sal_bind(s, name, namelen)
50 #define shutdown(s, how)                                   sal_shutdown(s, how)
51 #define getpeername(s, name, namelen)                      sal_getpeername(s, name, namelen)
52 #define getsockname(s, name, namelen)                      sal_getsockname(s, name, namelen)
53 #define getsockopt(s, level, optname, optval, optlen)      sal_getsockopt(s, level, optname, optval, optlen)
54 #define setsockopt(s, level, optname, optval, optlen)      sal_setsockopt(s, level, optname, optval, optlen)
55 #define connect(s, name, namelen)                          sal_connect(s, name, namelen)
56 #define listen(s, backlog)                                 sal_listen(s, backlog)
57 #define recv(s, mem, len, flags)                           sal_recvfrom(s, mem, len, flags, NULL, NULL)
58 #define recvfrom(s, mem, len, flags, from, fromlen)        sal_recvfrom(s, mem, len, flags, from, fromlen)
59 #define recvmsg(s, message, flags)                         sal_recvmsg(s, message, flags)
60 #define send(s, dataptr, size, flags)                      sal_sendto(s, dataptr, size, flags, NULL, NULL)
61 #define sendto(s, dataptr, size, flags, to, tolen)         sal_sendto(s, dataptr, size, flags, to, tolen)
62 #define sendmsg(s, message, flags)                         sal_sendmsg(s, message, flags)
63 #define socket(domain, type, protocol)                     sal_socket(domain, type, protocol)
64 #define socketpair(domain, type, protocol, fds)            sal_socketpair(domain, type, protocol, fds)
65 #define closesocket(s)                                     sal_closesocket(s)
66 #define ioctlsocket(s, cmd, arg)                           sal_ioctlsocket(s, cmd, arg)
67 #endif /* SAL_USING_POSIX */
68 
69 #ifdef __cplusplus
70 }
71 #endif
72 
73 #endif /* _SYS_SOCKET_H_ */
74