Zephyr API Documentation 4.0.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
27#include <zephyr/kernel.h>
28#include <sys/types.h>
29#include <zephyr/types.h>
30#include <zephyr/device.h>
31#include <zephyr/net/net_ip.h>
35#include <zephyr/sys/fdtable.h>
37#include <stdlib.h>
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
47/* ZSOCK_POLL* values are compatible with Linux */
49#define ZSOCK_POLLIN 1
51#define ZSOCK_POLLPRI 2
53#define ZSOCK_POLLOUT 4
55#define ZSOCK_POLLERR 8
57#define ZSOCK_POLLHUP 0x10
59#define ZSOCK_POLLNVAL 0x20
67#define ZSOCK_MSG_PEEK 0x02
70#define ZSOCK_MSG_CTRUNC 0x08
74#define ZSOCK_MSG_TRUNC 0x20
76#define ZSOCK_MSG_DONTWAIT 0x40
78#define ZSOCK_MSG_WAITALL 0x100
85/* Well-known values, e.g. from Linux man 2 shutdown:
86 * "The constants SHUT_RD, SHUT_WR, SHUT_RDWR have the value 0, 1, 2,
87 * respectively". Some software uses numeric values.
88 */
90#define ZSOCK_SHUT_RD 0
92#define ZSOCK_SHUT_WR 1
94#define ZSOCK_SHUT_RDWR 2
111#define SOL_TLS 282
112
117#define TLS_SEC_TAG_LIST 1
122#define TLS_HOSTNAME 2
128#define TLS_CIPHERSUITE_LIST 3
133#define TLS_CIPHERSUITE_USED 4
144#define TLS_PEER_VERIFY 5
153#define TLS_DTLS_ROLE 6
159#define TLS_ALPN_LIST 7
164#define TLS_DTLS_HANDSHAKE_TIMEOUT_MIN 8
165
170#define TLS_DTLS_HANDSHAKE_TIMEOUT_MAX 9
171
176#define TLS_CERT_NOCOPY 10
187#define TLS_NATIVE 11
192#define TLS_SESSION_CACHE 12
196#define TLS_SESSION_CACHE_PURGE 13
208#define TLS_DTLS_CID 14
218#define TLS_DTLS_CID_STATUS 15
223#define TLS_DTLS_CID_VALUE 16
230#define TLS_DTLS_PEER_CID_VALUE 17
238#define TLS_DTLS_HANDSHAKE_ON_CONNECT 18
239
240/* Valid values for @ref TLS_PEER_VERIFY option */
241#define TLS_PEER_VERIFY_NONE 0
242#define TLS_PEER_VERIFY_OPTIONAL 1
243#define TLS_PEER_VERIFY_REQUIRED 2
245/* Valid values for @ref TLS_DTLS_ROLE option */
246#define TLS_DTLS_ROLE_CLIENT 0
247#define TLS_DTLS_ROLE_SERVER 1
249/* Valid values for @ref TLS_CERT_NOCOPY option */
250#define TLS_CERT_NOCOPY_NONE 0
251#define TLS_CERT_NOCOPY_OPTIONAL 1
253/* Valid values for @ref TLS_SESSION_CACHE option */
254#define TLS_SESSION_CACHE_DISABLED 0
255#define TLS_SESSION_CACHE_ENABLED 1
257/* Valid values for @ref TLS_DTLS_CID (Connection ID) option */
258#define TLS_DTLS_CID_DISABLED 0
259#define TLS_DTLS_CID_SUPPORTED 1
260#define TLS_DTLS_CID_ENABLED 2
262/* Valid values for @ref TLS_DTLS_CID_STATUS option */
263#define TLS_DTLS_CID_STATUS_DISABLED 0
264#define TLS_DTLS_CID_STATUS_DOWNLINK 1
265#define TLS_DTLS_CID_STATUS_UPLINK 2
266#define TLS_DTLS_CID_STATUS_BIDIRECTIONAL 3
267 /* for @name */
268 /* for @defgroup */
269
288 struct sockaddr _ai_addr;
289 char _ai_canonname[DNS_MAX_NAME_SIZE + 1];
291};
292
329__syscall void *zsock_get_context_object(int sock);
330
346__syscall int zsock_socket(int family, int type, int proto);
347
358__syscall int zsock_socketpair(int family, int type, int proto, int *sv);
359
369__syscall int zsock_close(int sock);
370
382__syscall int zsock_shutdown(int sock, int how);
383
394__syscall int zsock_bind(int sock, const struct sockaddr *addr,
395 socklen_t addrlen);
396
407__syscall int zsock_connect(int sock, const struct sockaddr *addr,
408 socklen_t addrlen);
409
420__syscall int zsock_listen(int sock, int backlog);
421
432__syscall int zsock_accept(int sock, struct sockaddr *addr, socklen_t *addrlen);
433
444__syscall ssize_t zsock_sendto(int sock, const void *buf, size_t len,
445 int flags, const struct sockaddr *dest_addr,
446 socklen_t addrlen);
447
458static inline ssize_t zsock_send(int sock, const void *buf, size_t len,
459 int flags)
460{
461 return zsock_sendto(sock, buf, len, flags, NULL, 0);
462}
463
474__syscall ssize_t zsock_sendmsg(int sock, const struct msghdr *msg,
475 int flags);
476
487__syscall ssize_t zsock_recvfrom(int sock, void *buf, size_t max_len,
488 int flags, struct sockaddr *src_addr,
489 socklen_t *addrlen);
490
501__syscall ssize_t zsock_recvmsg(int sock, struct msghdr *msg, int flags);
502
513static inline ssize_t zsock_recv(int sock, void *buf, size_t max_len,
514 int flags)
515{
516 return zsock_recvfrom(sock, buf, max_len, flags, NULL, NULL);
517}
518
529__syscall int zsock_fcntl_impl(int sock, int cmd, int flags);
530
533/*
534 * Need this wrapper because newer GCC versions got too smart and "typecheck"
535 * even macros.
536 */
537static inline int zsock_fcntl_wrapper(int sock, int cmd, ...)
538{
539 va_list args;
540 int flags;
541
542 va_start(args, cmd);
543 flags = va_arg(args, int);
544 va_end(args);
545 return zsock_fcntl_impl(sock, cmd, flags);
546}
547
548#define zsock_fcntl zsock_fcntl_wrapper
549
567__syscall int zsock_ioctl_impl(int sock, unsigned long request, va_list ap);
568
571static inline int zsock_ioctl_wrapper(int sock, unsigned long request, ...)
572{
573 int ret;
574 va_list args;
575
576 va_start(args, request);
577 ret = zsock_ioctl_impl(sock, request, args);
578 va_end(args);
579
580 return ret;
581}
582
583#define zsock_ioctl zsock_ioctl_wrapper
584
598static inline int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout)
599{
600 return zvfs_poll(fds, nfds, timeout);
601}
602
616__syscall int zsock_getsockopt(int sock, int level, int optname,
617 void *optval, socklen_t *optlen);
618
632__syscall int zsock_setsockopt(int sock, int level, int optname,
633 const void *optval, socklen_t optlen);
634
645__syscall int zsock_getpeername(int sock, struct sockaddr *addr,
646 socklen_t *addrlen);
647
658__syscall int zsock_getsockname(int sock, struct sockaddr *addr,
659 socklen_t *addrlen);
660
671__syscall int zsock_gethostname(char *buf, size_t len);
672
683static inline char *zsock_inet_ntop(sa_family_t family, const void *src,
684 char *dst, size_t size)
685{
686 return net_addr_ntop(family, src, dst, size);
687}
688
699__syscall int zsock_inet_pton(sa_family_t family, const char *src, void *dst);
700
702__syscall int z_zsock_getaddrinfo_internal(const char *host,
703 const char *service,
704 const struct zsock_addrinfo *hints,
705 struct zsock_addrinfo *res);
708/* Flags for getaddrinfo() hints. */
709
715#define AI_PASSIVE 0x1
717#define AI_CANONNAME 0x2
719#define AI_NUMERICHOST 0x4
721#define AI_V4MAPPED 0x8
723#define AI_ALL 0x10
725#define AI_ADDRCONFIG 0x20
727#define AI_NUMERICSERV 0x400
729#define AI_EXTFLAGS 0x800
742int zsock_getaddrinfo(const char *host, const char *service,
743 const struct zsock_addrinfo *hints,
744 struct zsock_addrinfo **res);
745
757
768const char *zsock_gai_strerror(int errcode);
769
775#define NI_NUMERICHOST 1
777#define NI_NUMERICSERV 2
779#define NI_NOFQDN 4
781#define NI_NAMEREQD 8
783#define NI_DGRAM 16
784
785/* POSIX extensions */
786
788#ifndef NI_MAXHOST
789#define NI_MAXHOST 64
790#endif
803int zsock_getnameinfo(const struct sockaddr *addr, socklen_t addrlen,
804 char *host, socklen_t hostlen,
805 char *serv, socklen_t servlen, int flags);
806
807#if defined(CONFIG_NET_SOCKETS_POSIX_NAMES)
808
815#define pollfd zsock_pollfd
816
818static inline int socket(int family, int type, int proto)
819{
820 return zsock_socket(family, type, proto);
821}
822
824static inline int socketpair(int family, int type, int proto, int sv[2])
825{
826 return zsock_socketpair(family, type, proto, sv);
827}
828
830static inline int close(int sock)
831{
832 return zsock_close(sock);
833}
834
836static inline int shutdown(int sock, int how)
837{
838 return zsock_shutdown(sock, how);
839}
840
842static inline int bind(int sock, const struct sockaddr *addr, socklen_t addrlen)
843{
844 return zsock_bind(sock, addr, addrlen);
845}
846
848static inline int connect(int sock, const struct sockaddr *addr,
849 socklen_t addrlen)
850{
851 return zsock_connect(sock, addr, addrlen);
852}
853
855static inline int listen(int sock, int backlog)
856{
857 return zsock_listen(sock, backlog);
858}
859
861static inline int accept(int sock, struct sockaddr *addr, socklen_t *addrlen)
862{
863 return zsock_accept(sock, addr, addrlen);
864}
865
867static inline ssize_t send(int sock, const void *buf, size_t len, int flags)
868{
869 return zsock_send(sock, buf, len, flags);
870}
871
873static inline ssize_t recv(int sock, void *buf, size_t max_len, int flags)
874{
875 return zsock_recv(sock, buf, max_len, flags);
876}
877
879static inline ssize_t sendto(int sock, const void *buf, size_t len, int flags,
880 const struct sockaddr *dest_addr,
881 socklen_t addrlen)
882{
883 return zsock_sendto(sock, buf, len, flags, dest_addr, addrlen);
884}
885
887static inline ssize_t sendmsg(int sock, const struct msghdr *message,
888 int flags)
889{
890 return zsock_sendmsg(sock, message, flags);
891}
892
894static inline ssize_t recvfrom(int sock, void *buf, size_t max_len, int flags,
895 struct sockaddr *src_addr, socklen_t *addrlen)
896{
897 return zsock_recvfrom(sock, buf, max_len, flags, src_addr, addrlen);
898}
899
901static inline ssize_t recvmsg(int sock, struct msghdr *msg, int flags)
902{
903 return zsock_recvmsg(sock, msg, flags);
904}
905
907static inline int poll(struct zsock_pollfd *fds, int nfds, int timeout)
908{
909 return zsock_poll(fds, nfds, timeout);
910}
911
913static inline int getsockopt(int sock, int level, int optname,
914 void *optval, socklen_t *optlen)
915{
916 return zsock_getsockopt(sock, level, optname, optval, optlen);
917}
918
920static inline int setsockopt(int sock, int level, int optname,
921 const void *optval, socklen_t optlen)
922{
923 return zsock_setsockopt(sock, level, optname, optval, optlen);
924}
925
927static inline int getpeername(int sock, struct sockaddr *addr,
928 socklen_t *addrlen)
929{
930 return zsock_getpeername(sock, addr, addrlen);
931}
932
934static inline int getsockname(int sock, struct sockaddr *addr,
935 socklen_t *addrlen)
936{
937 return zsock_getsockname(sock, addr, addrlen);
938}
939
941static inline int getaddrinfo(const char *host, const char *service,
942 const struct zsock_addrinfo *hints,
943 struct zsock_addrinfo **res)
944{
945 return zsock_getaddrinfo(host, service, hints, res);
946}
947
949static inline void freeaddrinfo(struct zsock_addrinfo *ai)
950{
952}
953
955static inline const char *gai_strerror(int errcode)
956{
957 return zsock_gai_strerror(errcode);
958}
959
961static inline int getnameinfo(const struct sockaddr *addr, socklen_t addrlen,
962 char *host, socklen_t hostlen,
963 char *serv, socklen_t servlen, int flags)
964{
965 return zsock_getnameinfo(addr, addrlen, host, hostlen,
966 serv, servlen, flags);
967}
968
970#define addrinfo zsock_addrinfo
971
973static inline int gethostname(char *buf, size_t len)
974{
975 return zsock_gethostname(buf, len);
976}
977
979static inline int inet_pton(sa_family_t family, const char *src, void *dst)
980{
981 return zsock_inet_pton(family, src, dst);
982}
983
985static inline char *inet_ntop(sa_family_t family, const void *src, char *dst,
986 size_t size)
987{
988 return zsock_inet_ntop(family, src, dst, size);
989}
990
992#define POLLIN ZSOCK_POLLIN
994#define POLLOUT ZSOCK_POLLOUT
996#define POLLERR ZSOCK_POLLERR
998#define POLLHUP ZSOCK_POLLHUP
1000#define POLLNVAL ZSOCK_POLLNVAL
1001
1003#define MSG_PEEK ZSOCK_MSG_PEEK
1005#define MSG_CTRUNC ZSOCK_MSG_CTRUNC
1007#define MSG_TRUNC ZSOCK_MSG_TRUNC
1009#define MSG_DONTWAIT ZSOCK_MSG_DONTWAIT
1011#define MSG_WAITALL ZSOCK_MSG_WAITALL
1012
1014#define SHUT_RD ZSOCK_SHUT_RD
1016#define SHUT_WR ZSOCK_SHUT_WR
1018#define SHUT_RDWR ZSOCK_SHUT_RDWR
1019
1021#define EAI_BADFLAGS DNS_EAI_BADFLAGS
1023#define EAI_NONAME DNS_EAI_NONAME
1025#define EAI_AGAIN DNS_EAI_AGAIN
1027#define EAI_FAIL DNS_EAI_FAIL
1029#define EAI_NODATA DNS_EAI_NODATA
1031#define EAI_MEMORY DNS_EAI_MEMORY
1033#define EAI_SYSTEM DNS_EAI_SYSTEM
1035#define EAI_SERVICE DNS_EAI_SERVICE
1037#define EAI_SOCKTYPE DNS_EAI_SOCKTYPE
1039#define EAI_FAMILY DNS_EAI_FAMILY
1041#endif /* defined(CONFIG_NET_SOCKETS_POSIX_NAMES) */
1042
1048#if defined(CONFIG_NET_INTERFACE_NAME)
1049#define IFNAMSIZ CONFIG_NET_INTERFACE_NAME_LEN
1050#else
1051#define IFNAMSIZ Z_DEVICE_MAX_NAME_LEN
1052#endif
1053
1055struct ifreq {
1057};
1065#define SOL_SOCKET 1
1066
1067/* Socket options for SOL_SOCKET level */
1068
1070#define SO_DEBUG 1
1072#define SO_REUSEADDR 2
1074#define SO_TYPE 3
1076#define SO_ERROR 4
1078#define SO_DONTROUTE 5
1080#define SO_BROADCAST 6
1081
1083#define SO_SNDBUF 7
1085#define SO_RCVBUF 8
1086
1088#define SO_KEEPALIVE 9
1090#define SO_OOBINLINE 10
1092#define SO_PRIORITY 12
1094#define SO_LINGER 13
1096#define SO_REUSEPORT 15
1097
1099#define SO_RCVLOWAT 18
1101#define SO_SNDLOWAT 19
1102
1107#define SO_RCVTIMEO 20
1109#define SO_SNDTIMEO 21
1110
1112#define SO_BINDTODEVICE 25
1113
1115#define SO_ACCEPTCONN 30
1116
1118#define SO_TIMESTAMPING 37
1119
1121#define SO_PROTOCOL 38
1122
1124#define SO_DOMAIN 39
1125
1127#define SO_SOCKS5 60
1128
1130#define SO_TXTIME 61
1132#define SCM_TXTIME SO_TXTIME
1133
1137#define SOF_TIMESTAMPING_RX_HARDWARE BIT(0)
1142#define SOF_TIMESTAMPING_TX_HARDWARE BIT(1)
1143
1152/* Socket options for IPPROTO_TCP level */
1154#define TCP_NODELAY 1
1156#define TCP_KEEPIDLE 2
1158#define TCP_KEEPINTVL 3
1160#define TCP_KEEPCNT 4
1161
1168/* Socket options for IPPROTO_IP level */
1170#define IP_TOS 1
1171
1173#define IP_TTL 2
1174
1179#define IP_PKTINFO 8
1180
1188 unsigned int ipi_ifindex;
1191};
1192
1197#define IP_MTU 14
1198
1200#define IP_MULTICAST_IF 32
1202#define IP_MULTICAST_TTL 33
1204#define IP_ADD_MEMBERSHIP 35
1206#define IP_DROP_MEMBERSHIP 36
1207
1216
1224
1231/* Socket options for IPPROTO_IPV6 level */
1233#define IPV6_UNICAST_HOPS 16
1234
1236#define IPV6_MULTICAST_IF 17
1237
1239#define IPV6_MULTICAST_HOPS 18
1240
1242#define IPV6_ADD_MEMBERSHIP 20
1243
1245#define IPV6_DROP_MEMBERSHIP 21
1246
1248#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
1249
1251#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
1252
1263
1269#define IPV6_MTU 24
1270
1272#define IPV6_V6ONLY 26
1273
1278#define IPV6_RECVPKTINFO 49
1279
1281#define IPV6_ADDR_PREFERENCES 72
1282
1284#define IPV6_PREFER_SRC_TMP 0x0001
1286#define IPV6_PREFER_SRC_PUBLIC 0x0002
1291#define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100
1293#define IPV6_PREFER_SRC_COA 0x0004
1295#define IPV6_PREFER_SRC_HOME 0x0400
1297#define IPV6_PREFER_SRC_CGA 0x0008
1299#define IPV6_PREFER_SRC_NONCGA 0x0800
1300
1309 unsigned int ipi6_ifindex;
1310};
1311
1313#define IPV6_TCLASS 67
1321#define SOMAXCONN 128
1329#define IN6_IS_ADDR_UNSPECIFIED(addr) \
1330 net_ipv6_addr_cmp(net_ipv6_unspecified_address(), addr)
1331
1333#define IN6_IS_ADDR_LOOPBACK(addr) net_ipv6_is_addr_loopback(addr)
1334
1336#define IN6_IS_ADDR_MULTICAST(addr) net_ipv6_is_addr_mcast(addr)
1337
1339#define IN6_IS_ADDR_LINKLOCAL(addr) net_ipv6_is_ll_addr(addr)
1340
1342#define IN6_IS_ADDR_SITELOCAL(addr) net_ipv6_is_sl_addr(addr)
1343
1345#define IN6_IS_ADDR_V4MAPPED(addr) net_ipv6_addr_is_v4_mapped(addr)
1346
1348#define IN6_IS_ADDR_MC_GLOBAL(addr) net_ipv6_is_addr_mcast_global(addr)
1349
1351#define IN6_IS_ADDR_MC_NODELOCAL(addr) net_ipv6_is_addr_mcast_iface(addr)
1352
1354#define IN6_IS_ADDR_MC_LINKLOCAL(addr) net_ipv6_is_addr_mcast_link(addr)
1355
1357#define IN6_IS_ADDR_MC_SITELOCAL(addr) net_ipv6_is_addr_mcast_site(addr)
1358
1360#define IN6_IS_ADDR_MC_ORGLOCAL(addr) net_ipv6_is_addr_mcast_org(addr)
1361
1368struct net_socket_register {
1369 int family;
1370 bool is_offloaded;
1371 bool (*is_supported)(int family, int type, int proto);
1372 int (*handler)(int family, int type, int proto);
1373#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1374 /* Store also the name of the socket type in order to be able to
1375 * print it later.
1376 */
1377 const char * const name;
1378#endif
1379};
1380
1381#define NET_SOCKET_DEFAULT_PRIO CONFIG_NET_SOCKETS_PRIORITY_DEFAULT
1382
1383#define NET_SOCKET_GET_NAME(socket_name, prio) \
1384 __net_socket_register_##prio##_##socket_name
1385
1386#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1387#define K_OBJ_TYPE_SOCK K_OBJ_TYPE_ID_GEN("SOCK")
1388
1389#define NET_SOCKET_REGISTER_NAME(_name) \
1390 .name = STRINGIFY(_name),
1391#else
1392#define NET_SOCKET_REGISTER_NAME(_name)
1393#endif
1394
1395#define _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, _is_offloaded) \
1396 static const STRUCT_SECTION_ITERABLE(net_socket_register, \
1397 NET_SOCKET_GET_NAME(socket_name, prio)) = { \
1398 .family = _family, \
1399 .is_offloaded = _is_offloaded, \
1400 .is_supported = _is_supported, \
1401 .handler = _handler, \
1402 NET_SOCKET_REGISTER_NAME(socket_name) \
1403 }
1404
1405#define NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1406 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, false)
1407
1408#define NET_SOCKET_OFFLOAD_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1409 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, true)
1410
1413#ifdef __cplusplus
1414}
1415#endif
1416
1417#include <zephyr/syscalls/socket.h>
1418
1423/* Avoid circular loops with POSIX socket headers.
1424 * We have these includes here so that we do not need
1425 * to change the applications that were only including
1426 * zephyr/net/socket.h header file.
1427 *
1428 * Additionally, if non-zephyr-prefixed headers are used here,
1429 * native_sim pulls in those from the host rather than Zephyr's.
1430 *
1431 * This should be removed when CONFIG_NET_SOCKETS_POSIX_NAMES is removed.
1432 */
1433#if defined(CONFIG_POSIX_API)
1434#if !defined(ZEPHYR_INCLUDE_POSIX_ARPA_INET_H_)
1435#include <zephyr/posix/arpa/inet.h>
1436#endif
1437#if !defined(ZEPHYR_INCLUDE_POSIX_NETDB_H_)
1438#include <zephyr/posix/netdb.h>
1439#endif
1440#if !defined(ZEPHYR_INCLUDE_POSIX_UNISTD_H_)
1441#include <zephyr/posix/unistd.h>
1442#endif
1443#if !defined(ZEPHYR_INCLUDE_POSIX_POLL_H_)
1444#include <zephyr/posix/poll.h>
1445#endif
1446#if !defined(ZEPHYR_INCLUDE_POSIX_SYS_SOCKET_H_)
1448#endif
1449#endif /* CONFIG_POSIX_API */
1450
1451#endif /* ZEPHYR_INCLUDE_NET_SOCKET_H_ */
DNS resolving library.
int zvfs_poll(struct zvfs_pollfd *fds, int nfds, int poll_timeout)
static int socket(int family, int type, int proto)
POSIX wrapper for zsock_socket.
Definition socket.h:818
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:927
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:941
static int bind(int sock, const struct sockaddr *addr, socklen_t addrlen)
POSIX wrapper for zsock_bind.
Definition socket.h:842
static int gethostname(char *buf, size_t len)
POSIX wrapper for zsock_gethostname.
Definition socket.h:973
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:887
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:979
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:894
static ssize_t zsock_send(int sock, const void *buf, size_t len, int flags)
Send data to a connected peer.
Definition socket.h:458
static int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen)
POSIX wrapper for zsock_getsockopt.
Definition socket.h:913
static int accept(int sock, struct sockaddr *addr, socklen_t *addrlen)
POSIX wrapper for zsock_accept.
Definition socket.h:861
static int listen(int sock, int backlog)
POSIX wrapper for zsock_listen.
Definition socket.h:855
static int close(int sock)
POSIX wrapper for zsock_close.
Definition socket.h:830
int zsock_bind(int sock, const struct sockaddr *addr, socklen_t addrlen)
Bind a socket to a local network address.
static int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout)
Efficiently poll multiple sockets for events.
Definition socket.h:598
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:901
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:961
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:513
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:920
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:934
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:955
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:1051
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:879
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:867
static int socketpair(int family, int type, int proto, int sv[2])
POSIX wrapper for zsock_socketpair.
Definition socket.h:824
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:848
static ssize_t recv(int sock, void *buf, size_t max_len, int flags)
POSIX wrapper for zsock_recv.
Definition socket.h:873
static int poll(struct zsock_pollfd *fds, int nfds, int timeout)
POSIX wrapper for zsock_poll.
Definition socket.h:907
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:683
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:985
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:949
static int shutdown(int sock, int how)
POSIX wrapper for zsock_shutdown.
Definition socket.h:836
#define DNS_MAX_NAME_SIZE
Max size of the resolved name.
Definition dns_resolve.h:46
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:168
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:172
Public kernel APIs.
__SIZE_TYPE__ ssize_t
Definition types.h:28
IPv6 and IPv4 definitions.
flags
Definition parser.h:96
BSD select support functions.
#define bool
Definition stdbool.h:13
Interface description structure.
Definition socket.h:1055
char ifr_name[Z_DEVICE_MAX_NAME_LEN]
Network interface name.
Definition socket.h:1056
IPv6 address struct.
Definition net_ip.h:143
Incoming IPv6 packet information.
Definition socket.h:1307
struct in6_addr ipi6_addr
Destination IPv6 address.
Definition socket.h:1308
unsigned int ipi6_ifindex
Receive interface index.
Definition socket.h:1309
IPv4 address struct.
Definition net_ip.h:155
Incoming IPv4 packet information.
Definition socket.h:1187
unsigned int ipi_ifindex
Network interface index.
Definition socket.h:1188
struct in_addr ipi_spec_dst
Local address.
Definition socket.h:1189
struct in_addr ipi_addr
Header Destination address.
Definition socket.h:1190
Struct used when setting a IPv4 multicast network interface.
Definition socket.h:1220
struct in_addr imr_interface
IP address of local interface.
Definition socket.h:1222
struct in_addr imr_multiaddr
IP multicast group address.
Definition socket.h:1221
Struct used when joining or leaving a IPv4 multicast group.
Definition socket.h:1211
int imr_ifindex
Network interface index.
Definition socket.h:1214
struct in_addr imr_multiaddr
IP multicast group address.
Definition socket.h:1212
struct in_addr imr_address
IP address of local interface.
Definition socket.h:1213
Struct used when joining or leaving a IPv6 multicast group.
Definition socket.h:1256
struct in6_addr ipv6mr_multiaddr
IPv6 multicast address of group.
Definition socket.h:1258
int ipv6mr_ifindex
Network interface index of the local IPv6 address.
Definition socket.h:1261
Message struct.
Definition net_ip.h:257
Generic sockaddr struct.
Definition net_ip.h:408
Definition used when querying address information.
Definition socket.h:276
struct zsock_addrinfo * ai_next
Pointer to next address entry.
Definition socket.h:277
int ai_family
Address family of the returned addresses.
Definition socket.h:279
int ai_flags
Additional options.
Definition socket.h:278
char * ai_canonname
Optional official name of the host.
Definition socket.h:285
int ai_protocol
Protocol for addresses, 0 means any protocol.
Definition socket.h:281
struct sockaddr * ai_addr
Pointer to the address.
Definition socket.h:284
int ai_socktype
Socket type, for example SOCK_STREAM or SOCK_DGRAM.
Definition socket.h:280
int ai_eflags
Extended flags for special usage.
Definition socket.h:282
socklen_t ai_addrlen
Length of the socket address.
Definition socket.h:283
Definition of the monitored socket/file descriptor.
Definition socket_poll.h:31