/** * @file * @brief BSD Sockets compatible API definitions * * An API for applications to use BSD Sockets like API. */ /* * Copyright (c) 2017 Linaro Limited * * SPDX-License-Identifier: Apache-2.0 */ #ifndef __NET_SOCKET_H #define __NET_SOCKET_H /** * @brief BSD Sockets compatible API * @defgroup bsd_sockets BSD Sockets compatible API * @{ */ #include #include #include #include #ifdef __cplusplus extern "C" { #endif struct zsock_pollfd { int fd; short events; short revents; }; /* Values are compatible with Linux */ #define ZSOCK_POLLIN 1 #define ZSOCK_POLLOUT 4 struct zsock_addrinfo { struct zsock_addrinfo *ai_next; int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct sockaddr _ai_addr; char _ai_canonname[DNS_MAX_NAME_SIZE + 1]; }; int zsock_socket(int family, int type, int proto); int zsock_close(int sock); int zsock_bind(int sock, const struct sockaddr *addr, socklen_t addrlen); int zsock_connect(int sock, const struct sockaddr *addr, socklen_t addrlen); int zsock_listen(int sock, int backlog); int zsock_accept(int sock, struct sockaddr *addr, socklen_t *addrlen); ssize_t zsock_send(int sock, const void *buf, size_t len, int flags); ssize_t zsock_recv(int sock, void *buf, size_t max_len, int flags); ssize_t zsock_sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); ssize_t zsock_recvfrom(int sock, void *buf, size_t max_len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); int zsock_fcntl(int sock, int cmd, int flags); int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout); int zsock_inet_pton(sa_family_t family, const char *src, void *dst); int zsock_getaddrinfo(const char *host, const char *service, const struct zsock_addrinfo *hints, struct zsock_addrinfo **res); #if defined(CONFIG_NET_SOCKETS_POSIX_NAMES) #define socket zsock_socket #define close zsock_close #define bind zsock_bind #define connect zsock_connect #define listen zsock_listen #define accept zsock_accept #define send zsock_send #define recv zsock_recv #define fcntl zsock_fcntl #define sendto zsock_sendto #define recvfrom zsock_recvfrom #define poll zsock_poll #define pollfd zsock_pollfd #define POLLIN ZSOCK_POLLIN #define POLLOUT ZSOCK_POLLOUT #define inet_ntop net_addr_ntop #define inet_pton zsock_inet_pton #define getaddrinfo zsock_getaddrinfo #define addrinfo zsock_addrinfo #define EAI_BADFLAGS DNS_EAI_BADFLAGS #define EAI_NONAME DNS_EAI_NONAME #define EAI_AGAIN DNS_EAI_AGAIN #define EAI_FAIL DNS_EAI_FAIL #define EAI_NODATA DNS_EAI_NODATA #endif #ifdef __cplusplus } #endif /** * @} */ #endif /* __NET_SOCKET_H */