Zephyr API Documentation  3.6.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
socket.h
Go to the documentation of this file.
1
8/*
9 * Copyright (c) 2017-2018 Linaro Limited
10 * Copyright (c) 2021 Nordic Semiconductor
11 *
12 * SPDX-License-Identifier: Apache-2.0
13 */
14
15#ifndef ZEPHYR_INCLUDE_NET_SOCKET_H_
16#define ZEPHYR_INCLUDE_NET_SOCKET_H_
17
25#include <sys/types.h>
26#include <zephyr/types.h>
27#include <zephyr/net/net_ip.h>
31#include <zephyr/sys/fdtable.h>
32#include <stdlib.h>
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
44 int fd;
45 short events;
46 short revents;
47};
48
53/* ZSOCK_POLL* values are compatible with Linux */
55#define ZSOCK_POLLIN 1
57#define ZSOCK_POLLPRI 2
59#define ZSOCK_POLLOUT 4
61#define ZSOCK_POLLERR 8
63#define ZSOCK_POLLHUP 0x10
65#define ZSOCK_POLLNVAL 0x20
73#define ZSOCK_MSG_PEEK 0x02
76#define ZSOCK_MSG_CTRUNC 0x08
80#define ZSOCK_MSG_TRUNC 0x20
82#define ZSOCK_MSG_DONTWAIT 0x40
84#define ZSOCK_MSG_WAITALL 0x100
91/* Well-known values, e.g. from Linux man 2 shutdown:
92 * "The constants SHUT_RD, SHUT_WR, SHUT_RDWR have the value 0, 1, 2,
93 * respectively". Some software uses numeric values.
94 */
96#define ZSOCK_SHUT_RD 0
98#define ZSOCK_SHUT_WR 1
100#define ZSOCK_SHUT_RDWR 2
115#define SOL_TLS 282
116
121#define TLS_SEC_TAG_LIST 1
126#define TLS_HOSTNAME 2
132#define TLS_CIPHERSUITE_LIST 3
137#define TLS_CIPHERSUITE_USED 4
148#define TLS_PEER_VERIFY 5
157#define TLS_DTLS_ROLE 6
163#define TLS_ALPN_LIST 7
168#define TLS_DTLS_HANDSHAKE_TIMEOUT_MIN 8
169
174#define TLS_DTLS_HANDSHAKE_TIMEOUT_MAX 9
175
180#define TLS_CERT_NOCOPY 10
191#define TLS_NATIVE 11
196#define TLS_SESSION_CACHE 12
200#define TLS_SESSION_CACHE_PURGE 13
212#define TLS_DTLS_CID 14
222#define TLS_DTLS_CID_STATUS 15
227#define TLS_DTLS_CID_VALUE 16
234#define TLS_DTLS_PEER_CID_VALUE 17
242#define TLS_DTLS_HANDSHAKE_ON_CONNECT 18
243
244/* Valid values for @ref TLS_PEER_VERIFY option */
245#define TLS_PEER_VERIFY_NONE 0
246#define TLS_PEER_VERIFY_OPTIONAL 1
247#define TLS_PEER_VERIFY_REQUIRED 2
249/* Valid values for @ref TLS_DTLS_ROLE option */
250#define TLS_DTLS_ROLE_CLIENT 0
251#define TLS_DTLS_ROLE_SERVER 1
253/* Valid values for @ref TLS_CERT_NOCOPY option */
254#define TLS_CERT_NOCOPY_NONE 0
255#define TLS_CERT_NOCOPY_OPTIONAL 1
257/* Valid values for @ref TLS_SESSION_CACHE option */
258#define TLS_SESSION_CACHE_DISABLED 0
259#define TLS_SESSION_CACHE_ENABLED 1
261/* Valid values for @ref TLS_DTLS_CID (Connection ID) option */
262#define TLS_DTLS_CID_DISABLED 0
263#define TLS_DTLS_CID_SUPPORTED 1
264#define TLS_DTLS_CID_ENABLED 2
266/* Valid values for @ref TLS_DTLS_CID_STATUS option */
267#define TLS_DTLS_CID_STATUS_DISABLED 0
268#define TLS_DTLS_CID_STATUS_DOWNLINK 1
269#define TLS_DTLS_CID_STATUS_UPLINK 2
270#define TLS_DTLS_CID_STATUS_BIDIRECTIONAL 3 /* for @name */ /* for @defgroup */
273
292 struct sockaddr _ai_addr;
293 char _ai_canonname[DNS_MAX_NAME_SIZE + 1];
295};
296
333__syscall void *zsock_get_context_object(int sock);
334
352__syscall int zsock_socket(int family, int type, int proto);
353
366__syscall int zsock_socketpair(int family, int type, int proto, int *sv);
367
379__syscall int zsock_close(int sock);
380
394__syscall int zsock_shutdown(int sock, int how);
395
408__syscall int zsock_bind(int sock, const struct sockaddr *addr,
409 socklen_t addrlen);
410
423__syscall int zsock_connect(int sock, const struct sockaddr *addr,
424 socklen_t addrlen);
425
438__syscall int zsock_listen(int sock, int backlog);
439
452__syscall int zsock_accept(int sock, struct sockaddr *addr, socklen_t *addrlen);
453
466__syscall ssize_t zsock_sendto(int sock, const void *buf, size_t len,
467 int flags, const struct sockaddr *dest_addr,
468 socklen_t addrlen);
469
482static inline ssize_t zsock_send(int sock, const void *buf, size_t len,
483 int flags)
484{
485 return zsock_sendto(sock, buf, len, flags, NULL, 0);
486}
487
500__syscall ssize_t zsock_sendmsg(int sock, const struct msghdr *msg,
501 int flags);
502
515__syscall ssize_t zsock_recvfrom(int sock, void *buf, size_t max_len,
516 int flags, struct sockaddr *src_addr,
517 socklen_t *addrlen);
518
531__syscall ssize_t zsock_recvmsg(int sock, struct msghdr *msg, int flags);
532
545static inline ssize_t zsock_recv(int sock, void *buf, size_t max_len,
546 int flags)
547{
548 return zsock_recvfrom(sock, buf, max_len, flags, NULL, NULL);
549}
550
563__syscall int zsock_fcntl_impl(int sock, int cmd, int flags);
564
565/*
566 * Need this wrapper because newer GCC versions got too smart and "typecheck"
567 * even macros.
568 */
569static inline int zsock_fcntl_wrapper(int sock, int cmd, ...)
570{
571 va_list args;
572 int flags;
573
574 va_start(args, cmd);
575 flags = va_arg(args, int);
576 va_end(args);
577 return zsock_fcntl_impl(sock, cmd, flags);
578}
579
580#define zsock_fcntl zsock_fcntl_wrapper
581
599__syscall int zsock_ioctl_impl(int sock, unsigned long request, va_list ap);
600
601static inline int zsock_ioctl_wrapper(int sock, unsigned long request, ...)
602{
603 int ret;
604 va_list args;
605
606 va_start(args, request);
607 ret = zsock_ioctl_impl(sock, request, args);
608 va_end(args);
609
610 return ret;
611}
612
613#define zsock_ioctl zsock_ioctl_wrapper
614
628__syscall int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout);
629
645__syscall int zsock_getsockopt(int sock, int level, int optname,
646 void *optval, socklen_t *optlen);
647
663__syscall int zsock_setsockopt(int sock, int level, int optname,
664 const void *optval, socklen_t optlen);
665
678__syscall int zsock_getpeername(int sock, struct sockaddr *addr,
679 socklen_t *addrlen);
680
693__syscall int zsock_getsockname(int sock, struct sockaddr *addr,
694 socklen_t *addrlen);
695
708__syscall int zsock_gethostname(char *buf, size_t len);
709
722static inline char *zsock_inet_ntop(sa_family_t family, const void *src,
723 char *dst, size_t size)
724{
725 return net_addr_ntop(family, src, dst, size);
726}
727
740__syscall int zsock_inet_pton(sa_family_t family, const char *src, void *dst);
741
743__syscall int z_zsock_getaddrinfo_internal(const char *host,
744 const char *service,
745 const struct zsock_addrinfo *hints,
746 struct zsock_addrinfo *res);
749/* Flags for getaddrinfo() hints. */
750
756#define AI_PASSIVE 0x1
758#define AI_CANONNAME 0x2
760#define AI_NUMERICHOST 0x4
762#define AI_V4MAPPED 0x8
764#define AI_ALL 0x10
766#define AI_ADDRCONFIG 0x20
768#define AI_NUMERICSERV 0x400
770#define AI_EXTFLAGS 0x800
785int zsock_getaddrinfo(const char *host, const char *service,
786 const struct zsock_addrinfo *hints,
787 struct zsock_addrinfo **res);
788
802
815const char *zsock_gai_strerror(int errcode);
816
822#define NI_NUMERICHOST 1
824#define NI_NUMERICSERV 2
826#define NI_NOFQDN 4
828#define NI_NAMEREQD 8
830#define NI_DGRAM 16
831
832/* POSIX extensions */
833
835#ifndef NI_MAXHOST
836#define NI_MAXHOST 64
837#endif
852int zsock_getnameinfo(const struct sockaddr *addr, socklen_t addrlen,
853 char *host, socklen_t hostlen,
854 char *serv, socklen_t servlen, int flags);
855
856#if defined(CONFIG_NET_SOCKETS_POSIX_NAMES)
857
864#define pollfd zsock_pollfd
865
867static inline int socket(int family, int type, int proto)
868{
869 return zsock_socket(family, type, proto);
870}
871
873static inline int socketpair(int family, int type, int proto, int sv[2])
874{
875 return zsock_socketpair(family, type, proto, sv);
876}
877
879static inline int close(int sock)
880{
881 return zsock_close(sock);
882}
883
885static inline int shutdown(int sock, int how)
886{
887 return zsock_shutdown(sock, how);
888}
889
891static inline int bind(int sock, const struct sockaddr *addr, socklen_t addrlen)
892{
893 return zsock_bind(sock, addr, addrlen);
894}
895
897static inline int connect(int sock, const struct sockaddr *addr,
898 socklen_t addrlen)
899{
900 return zsock_connect(sock, addr, addrlen);
901}
902
904static inline int listen(int sock, int backlog)
905{
906 return zsock_listen(sock, backlog);
907}
908
910static inline int accept(int sock, struct sockaddr *addr, socklen_t *addrlen)
911{
912 return zsock_accept(sock, addr, addrlen);
913}
914
916static inline ssize_t send(int sock, const void *buf, size_t len, int flags)
917{
918 return zsock_send(sock, buf, len, flags);
919}
920
922static inline ssize_t recv(int sock, void *buf, size_t max_len, int flags)
923{
924 return zsock_recv(sock, buf, max_len, flags);
925}
926
928static inline ssize_t sendto(int sock, const void *buf, size_t len, int flags,
929 const struct sockaddr *dest_addr,
930 socklen_t addrlen)
931{
932 return zsock_sendto(sock, buf, len, flags, dest_addr, addrlen);
933}
934
936static inline ssize_t sendmsg(int sock, const struct msghdr *message,
937 int flags)
938{
939 return zsock_sendmsg(sock, message, flags);
940}
941
943static inline ssize_t recvfrom(int sock, void *buf, size_t max_len, int flags,
944 struct sockaddr *src_addr, socklen_t *addrlen)
945{
946 return zsock_recvfrom(sock, buf, max_len, flags, src_addr, addrlen);
947}
948
950static inline ssize_t recvmsg(int sock, struct msghdr *msg, int flags)
951{
952 return zsock_recvmsg(sock, msg, flags);
953}
954
956static inline int poll(struct zsock_pollfd *fds, int nfds, int timeout)
957{
958 return zsock_poll(fds, nfds, timeout);
959}
960
962static inline int getsockopt(int sock, int level, int optname,
963 void *optval, socklen_t *optlen)
964{
965 return zsock_getsockopt(sock, level, optname, optval, optlen);
966}
967
969static inline int setsockopt(int sock, int level, int optname,
970 const void *optval, socklen_t optlen)
971{
972 return zsock_setsockopt(sock, level, optname, optval, optlen);
973}
974
976static inline int getpeername(int sock, struct sockaddr *addr,
977 socklen_t *addrlen)
978{
979 return zsock_getpeername(sock, addr, addrlen);
980}
981
983static inline int getsockname(int sock, struct sockaddr *addr,
984 socklen_t *addrlen)
985{
986 return zsock_getsockname(sock, addr, addrlen);
987}
988
990static inline int getaddrinfo(const char *host, const char *service,
991 const struct zsock_addrinfo *hints,
992 struct zsock_addrinfo **res)
993{
994 return zsock_getaddrinfo(host, service, hints, res);
995}
996
998static inline void freeaddrinfo(struct zsock_addrinfo *ai)
999{
1001}
1002
1004static inline const char *gai_strerror(int errcode)
1005{
1006 return zsock_gai_strerror(errcode);
1007}
1008
1010static inline int getnameinfo(const struct sockaddr *addr, socklen_t addrlen,
1011 char *host, socklen_t hostlen,
1012 char *serv, socklen_t servlen, int flags)
1013{
1014 return zsock_getnameinfo(addr, addrlen, host, hostlen,
1015 serv, servlen, flags);
1016}
1017
1019#define addrinfo zsock_addrinfo
1020
1022static inline int gethostname(char *buf, size_t len)
1023{
1024 return zsock_gethostname(buf, len);
1025}
1026
1028static inline int inet_pton(sa_family_t family, const char *src, void *dst)
1029{
1030 return zsock_inet_pton(family, src, dst);
1031}
1032
1034static inline char *inet_ntop(sa_family_t family, const void *src, char *dst,
1035 size_t size)
1036{
1037 return zsock_inet_ntop(family, src, dst, size);
1038}
1039
1041#define POLLIN ZSOCK_POLLIN
1043#define POLLOUT ZSOCK_POLLOUT
1045#define POLLERR ZSOCK_POLLERR
1047#define POLLHUP ZSOCK_POLLHUP
1049#define POLLNVAL ZSOCK_POLLNVAL
1050
1052#define MSG_PEEK ZSOCK_MSG_PEEK
1054#define MSG_CTRUNC ZSOCK_MSG_CTRUNC
1056#define MSG_TRUNC ZSOCK_MSG_TRUNC
1058#define MSG_DONTWAIT ZSOCK_MSG_DONTWAIT
1060#define MSG_WAITALL ZSOCK_MSG_WAITALL
1061
1063#define SHUT_RD ZSOCK_SHUT_RD
1065#define SHUT_WR ZSOCK_SHUT_WR
1067#define SHUT_RDWR ZSOCK_SHUT_RDWR
1068
1070#define EAI_BADFLAGS DNS_EAI_BADFLAGS
1072#define EAI_NONAME DNS_EAI_NONAME
1074#define EAI_AGAIN DNS_EAI_AGAIN
1076#define EAI_FAIL DNS_EAI_FAIL
1078#define EAI_NODATA DNS_EAI_NODATA
1080#define EAI_MEMORY DNS_EAI_MEMORY
1082#define EAI_SYSTEM DNS_EAI_SYSTEM
1084#define EAI_SERVICE DNS_EAI_SERVICE
1086#define EAI_SOCKTYPE DNS_EAI_SOCKTYPE
1088#define EAI_FAMILY DNS_EAI_FAMILY
1090#endif /* defined(CONFIG_NET_SOCKETS_POSIX_NAMES) */
1091
1097#if defined(CONFIG_NET_INTERFACE_NAME)
1098#define IFNAMSIZ CONFIG_NET_INTERFACE_NAME_LEN
1099#else
1100#define IFNAMSIZ Z_DEVICE_MAX_NAME_LEN
1101#endif
1102
1104struct ifreq {
1106};
1114#define SOL_SOCKET 1
1115
1116/* Socket options for SOL_SOCKET level */
1117
1119#define SO_DEBUG 1
1121#define SO_REUSEADDR 2
1123#define SO_TYPE 3
1125#define SO_ERROR 4
1127#define SO_DONTROUTE 5
1129#define SO_BROADCAST 6
1130
1132#define SO_SNDBUF 7
1134#define SO_RCVBUF 8
1135
1137#define SO_KEEPALIVE 9
1139#define SO_OOBINLINE 10
1141#define SO_PRIORITY 12
1143#define SO_LINGER 13
1145#define SO_REUSEPORT 15
1146
1148#define SO_RCVLOWAT 18
1150#define SO_SNDLOWAT 19
1151
1156#define SO_RCVTIMEO 20
1158#define SO_SNDTIMEO 21
1159
1161#define SO_BINDTODEVICE 25
1162
1164#define SO_ACCEPTCONN 30
1165
1167#define SO_TIMESTAMPING 37
1169#define SO_PROTOCOL 38
1170
1172#define SO_DOMAIN 39
1173
1175#define SO_SOCKS5 60
1176
1178#define SO_TXTIME 61
1180#define SCM_TXTIME SO_TXTIME
1181
1188/* Socket options for IPPROTO_TCP level */
1190#define TCP_NODELAY 1
1192#define TCP_KEEPIDLE 2
1194#define TCP_KEEPINTVL 3
1196#define TCP_KEEPCNT 4
1197
1204/* Socket options for IPPROTO_IP level */
1206#define IP_TOS 1
1207
1209#define IP_TTL 2
1210
1215#define IP_PKTINFO 8
1216
1224 unsigned int ipi_ifindex;
1227};
1228
1230#define IP_MULTICAST_TTL 33
1232#define IP_ADD_MEMBERSHIP 35
1234#define IP_DROP_MEMBERSHIP 36
1235
1239struct ip_mreqn {
1243};
1244
1251/* Socket options for IPPROTO_IPV6 level */
1253#define IPV6_UNICAST_HOPS 16
1254
1256#define IPV6_MULTICAST_HOPS 18
1257
1259#define IPV6_ADD_MEMBERSHIP 20
1260
1262#define IPV6_DROP_MEMBERSHIP 21
1263
1270
1273};
1274
1276#define IPV6_V6ONLY 26
1277
1282#define IPV6_RECVPKTINFO 49
1283
1285#define IPV6_ADDR_PREFERENCES 72
1286
1288#define IPV6_PREFER_SRC_TMP 0x0001
1290#define IPV6_PREFER_SRC_PUBLIC 0x0002
1295#define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100
1297#define IPV6_PREFER_SRC_COA 0x0004
1299#define IPV6_PREFER_SRC_HOME 0x0400
1301#define IPV6_PREFER_SRC_CGA 0x0008
1303#define IPV6_PREFER_SRC_NONCGA 0x0800
1304
1313 unsigned int ipi6_ifindex;
1314};
1315
1317#define IPV6_TCLASS 67
1325#define SOMAXCONN 128
1332struct net_socket_register {
1333 int family;
1334 bool is_offloaded;
1335 bool (*is_supported)(int family, int type, int proto);
1336 int (*handler)(int family, int type, int proto);
1337#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1338 /* Store also the name of the socket type in order to be able to
1339 * print it later.
1340 */
1341 const char * const name;
1342#endif
1343};
1344
1345#define NET_SOCKET_DEFAULT_PRIO CONFIG_NET_SOCKETS_PRIORITY_DEFAULT
1346
1347#define NET_SOCKET_GET_NAME(socket_name, prio) \
1348 __net_socket_register_##prio##_##socket_name
1349
1350#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1351#define K_OBJ_TYPE_SOCK K_OBJ_TYPE_ID_GEN("SOCK")
1352
1353#define NET_SOCKET_REGISTER_NAME(_name) \
1354 .name = STRINGIFY(_name),
1355#else
1356#define NET_SOCKET_REGISTER_NAME(_name)
1357#endif
1358
1359#define _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, _is_offloaded) \
1360 static const STRUCT_SECTION_ITERABLE(net_socket_register, \
1361 NET_SOCKET_GET_NAME(socket_name, prio)) = { \
1362 .family = _family, \
1363 .is_offloaded = _is_offloaded, \
1364 .is_supported = _is_supported, \
1365 .handler = _handler, \
1366 NET_SOCKET_REGISTER_NAME(socket_name) \
1367 }
1368
1369#define NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1370 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, false)
1371
1372#define NET_SOCKET_OFFLOAD_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1373 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, true)
1374
1377#ifdef __cplusplus
1378}
1379#endif
1380
1381#include <syscalls/socket.h>
1382
1387/* Avoid circular loops with POSIX socket headers.
1388 * We have these includes here so that we do not need
1389 * to change the applications that were only including
1390 * zephyr/net/socket.h header file.
1391 */
1392#if defined(CONFIG_POSIX_API)
1393#if !defined(ZEPHYR_INCLUDE_POSIX_ARPA_INET_H_)
1394#include <zephyr/posix/arpa/inet.h>
1395#endif
1396#if !defined(ZEPHYR_INCLUDE_POSIX_NETDB_H_)
1397#include <zephyr/posix/netdb.h>
1398#endif
1399#if !defined(ZEPHYR_INCLUDE_POSIX_UNISTD_H_)
1400#include <zephyr/posix/unistd.h>
1401#endif
1402#if !defined(ZEPHYR_INCLUDE_POSIX_POLL_H_)
1403#include <zephyr/posix/poll.h>
1404#endif
1405#if !defined(ZEPHYR_INCLUDE_POSIX_SYS_SOCKET_H_)
1407#endif
1408#endif /* CONFIG_POSIX_API */
1409
1410#endif /* ZEPHYR_INCLUDE_NET_SOCKET_H_ */
DNS resolving library.
static int socket(int family, int type, int proto)
POSIX wrapper for zsock_socket.
Definition: socket.h:867
int zsock_ioctl_impl(int sock, unsigned long request, va_list ap)
Control underlying socket parameters.
static int getpeername(int sock, struct sockaddr *addr, socklen_t *addrlen)
POSIX wrapper for zsock_getpeername.
Definition: socket.h:976
int zsock_getpeername(int sock, struct sockaddr *addr, socklen_t *addrlen)
Get peer name.
static int getaddrinfo(const char *host, const char *service, const struct zsock_addrinfo *hints, struct zsock_addrinfo **res)
POSIX wrapper for zsock_getaddrinfo.
Definition: socket.h:990
static int bind(int sock, const struct sockaddr *addr, socklen_t addrlen)
POSIX wrapper for zsock_bind.
Definition: socket.h:891
static int gethostname(char *buf, size_t len)
POSIX wrapper for zsock_gethostname.
Definition: socket.h:1022
ssize_t zsock_sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
Send data to an arbitrary network address.
int zsock_connect(int sock, const struct sockaddr *addr, socklen_t addrlen)
Connect a socket to a peer network address.
static ssize_t sendmsg(int sock, const struct msghdr *message, int flags)
POSIX wrapper for zsock_sendmsg.
Definition: socket.h:936
int zsock_socketpair(int family, int type, int proto, int *sv)
Create an unnamed pair of connected sockets.
void * zsock_get_context_object(int sock)
Obtain a file descriptor's associated net context.
int zsock_accept(int sock, struct sockaddr *addr, socklen_t *addrlen)
Accept a connection on listening socket.
static int inet_pton(sa_family_t family, const char *src, void *dst)
POSIX wrapper for zsock_inet_pton.
Definition: socket.h:1028
static ssize_t recvfrom(int sock, void *buf, size_t max_len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
POSIX wrapper for zsock_recvfrom.
Definition: socket.h:943
static ssize_t zsock_send(int sock, const void *buf, size_t len, int flags)
Send data to a connected peer.
Definition: socket.h:482
static int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen)
POSIX wrapper for zsock_getsockopt.
Definition: socket.h:962
static int zsock_fcntl_wrapper(int sock, int cmd,...)
Definition: socket.h:569
static int accept(int sock, struct sockaddr *addr, socklen_t *addrlen)
POSIX wrapper for zsock_accept.
Definition: socket.h:910
static int listen(int sock, int backlog)
POSIX wrapper for zsock_listen.
Definition: socket.h:904
static int close(int sock)
POSIX wrapper for zsock_close.
Definition: socket.h:879
int zsock_bind(int sock, const struct sockaddr *addr, socklen_t addrlen)
Bind a socket to a local network address.
int zsock_socket(int family, int type, int proto)
Create a network socket.
int zsock_getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen)
Get various socket options.
static ssize_t recvmsg(int sock, struct msghdr *msg, int flags)
POSIX wrapper for zsock_recvmsg.
Definition: socket.h:950
static int getnameinfo(const struct sockaddr *addr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags)
POSIX wrapper for zsock_getnameinfo.
Definition: socket.h:1010
void zsock_freeaddrinfo(struct zsock_addrinfo *ai)
Free results returned by zsock_getaddrinfo()
static ssize_t zsock_recv(int sock, void *buf, size_t max_len, int flags)
Receive data from a connected peer.
Definition: socket.h:545
int zsock_gethostname(char *buf, size_t len)
Get local host name.
static int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen)
POSIX wrapper for zsock_setsockopt.
Definition: socket.h:969
int zsock_getsockname(int sock, struct sockaddr *addr, socklen_t *addrlen)
Get socket name.
static int getsockname(int sock, struct sockaddr *addr, socklen_t *addrlen)
POSIX wrapper for zsock_getsockname.
Definition: socket.h:983
int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout)
Efficiently poll multiple sockets for events.
const char * zsock_gai_strerror(int errcode)
Convert zsock_getaddrinfo() error code to textual message.
int zsock_fcntl_impl(int sock, int cmd, int flags)
Control blocking/non-blocking mode of a socket.
static const char * gai_strerror(int errcode)
POSIX wrapper for zsock_gai_strerror.
Definition: socket.h:1004
static int zsock_ioctl_wrapper(int sock, unsigned long request,...)
Definition: socket.h:601
int zsock_shutdown(int sock, int how)
Shutdown socket send/receive operations.
ssize_t zsock_recvmsg(int sock, struct msghdr *msg, int flags)
Receive a message from an arbitrary network address.
ssize_t zsock_recvfrom(int sock, void *buf, size_t max_len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
Receive data from an arbitrary network address.
#define IFNAMSIZ
Network interface name length.
Definition: socket.h:1100
static ssize_t sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
POSIX wrapper for zsock_sendto.
Definition: socket.h:928
int zsock_setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen)
Set various socket options.
static ssize_t send(int sock, const void *buf, size_t len, int flags)
POSIX wrapper for zsock_send.
Definition: socket.h:916
static int socketpair(int family, int type, int proto, int sv[2])
POSIX wrapper for zsock_socketpair.
Definition: socket.h:873
ssize_t zsock_sendmsg(int sock, const struct msghdr *msg, int flags)
Send data to an arbitrary network address.
static int connect(int sock, const struct sockaddr *addr, socklen_t addrlen)
POSIX wrapper for zsock_connect.
Definition: socket.h:897
static ssize_t recv(int sock, void *buf, size_t max_len, int flags)
POSIX wrapper for zsock_recv.
Definition: socket.h:922
static int poll(struct zsock_pollfd *fds, int nfds, int timeout)
POSIX wrapper for zsock_poll.
Definition: socket.h:956
static char * zsock_inet_ntop(sa_family_t family, const void *src, char *dst, size_t size)
Convert network address from internal to numeric ASCII form.
Definition: socket.h:722
int zsock_inet_pton(sa_family_t family, const char *src, void *dst)
Convert network address from numeric ASCII form to internal representation.
int zsock_close(int sock)
Close a network socket.
int zsock_listen(int sock, int backlog)
Set up a STREAM socket to accept peer connections.
int zsock_getnameinfo(const struct sockaddr *addr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags)
Resolve a network address to a domain name or ASCII address.
static char * inet_ntop(sa_family_t family, const void *src, char *dst, size_t size)
POSIX wrapper for zsock_inet_ntop.
Definition: socket.h:1034
int zsock_getaddrinfo(const char *host, const char *service, const struct zsock_addrinfo *hints, struct zsock_addrinfo **res)
Resolve a domain name to one or more network addresses.
static void freeaddrinfo(struct zsock_addrinfo *ai)
POSIX wrapper for zsock_freeaddrinfo.
Definition: socket.h:998
static int shutdown(int sock, int how)
POSIX wrapper for zsock_shutdown.
Definition: socket.h:885
#define DNS_MAX_NAME_SIZE
Max size of the resolved name.
Definition: dns_resolve.h:42
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition: ft8xx_reference_api.h:153
unsigned short int sa_family_t
Socket address family type.
Definition: net_ip.h:164
char * net_addr_ntop(sa_family_t family, const void *src, char *dst, size_t size)
Convert IP address to string form.
size_t socklen_t
Length of a socket address.
Definition: net_ip.h:168
__SIZE_TYPE__ ssize_t
Definition: types.h:28
IPv6 and IPv4 definitions.
flags
Definition: parser.h:96
#define bool
Definition: stdbool.h:13
Interface description structure.
Definition: socket.h:1104
char ifr_name[Z_DEVICE_MAX_NAME_LEN]
Network interface name.
Definition: socket.h:1105
IPv6 address struct.
Definition: net_ip.h:139
Incoming IPv6 packet information.
Definition: socket.h:1311
struct in6_addr ipi6_addr
Destination IPv6 address.
Definition: socket.h:1312
unsigned int ipi6_ifindex
Receive interface index.
Definition: socket.h:1313
IPv4 address struct.
Definition: net_ip.h:151
Incoming IPv4 packet information.
Definition: socket.h:1223
unsigned int ipi_ifindex
Network interface index.
Definition: socket.h:1224
struct in_addr ipi_spec_dst
Local address.
Definition: socket.h:1225
struct in_addr ipi_addr
Header Destination address.
Definition: socket.h:1226
Struct used when joining or leaving a IPv4 multicast group.
Definition: socket.h:1239
int imr_ifindex
Network interface index.
Definition: socket.h:1242
struct in_addr imr_multiaddr
IP multicast group address.
Definition: socket.h:1240
struct in_addr imr_address
IP address of local interface.
Definition: socket.h:1241
Struct used when joining or leaving a IPv6 multicast group.
Definition: socket.h:1267
struct in6_addr ipv6mr_multiaddr
IPv6 multicast address of group.
Definition: socket.h:1269
int ipv6mr_ifindex
Network interface index of the local IPv6 address.
Definition: socket.h:1272
Definition: net_ip.h:238
Generic sockaddr struct.
Definition: net_ip.h:347
Definition used when querying address information.
Definition: socket.h:280
struct zsock_addrinfo * ai_next
Pointer to next address entry.
Definition: socket.h:281
int ai_family
Address family of the returned addresses.
Definition: socket.h:283
int ai_flags
Additional options.
Definition: socket.h:282
char * ai_canonname
Optional official name of the host.
Definition: socket.h:289
int ai_protocol
Protocol for addresses, 0 means any protocol.
Definition: socket.h:285
struct sockaddr * ai_addr
Pointer to the address.
Definition: socket.h:288
int ai_socktype
Socket type, for example SOCK_STREAM or SOCK_DGRAM.
Definition: socket.h:284
int ai_eflags
Extended flags for special usage.
Definition: socket.h:286
socklen_t ai_addrlen
Length of the socket address.
Definition: socket.h:287
Definition of the monitored socket/file descriptor.
Definition: socket.h:43
short events
Requested events.
Definition: socket.h:45
int fd
Socket descriptor.
Definition: socket.h:44
short revents
Returned events.
Definition: socket.h:46