Zephyr Project API 4.2.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 * Copyright (c) 2025 Aerlync Labs Inc.
12 * Copyright 2025 NXP
13 *
14 * SPDX-License-Identifier: Apache-2.0
15 */
16
17#ifndef ZEPHYR_INCLUDE_NET_SOCKET_H_
18#define ZEPHYR_INCLUDE_NET_SOCKET_H_
19
29#include <zephyr/kernel.h>
30#include <sys/types.h>
31#include <zephyr/types.h>
32#include <zephyr/device.h>
33#include <zephyr/net/net_ip.h>
37#include <zephyr/sys/fdtable.h>
39#include <stdlib.h>
40
41#ifdef __cplusplus
42extern "C" {
43#endif
44
49/* ZSOCK_POLL* values are compatible with Linux */
51#define ZSOCK_POLLIN 1
53#define ZSOCK_POLLPRI 2
55#define ZSOCK_POLLOUT 4
57#define ZSOCK_POLLERR 8
59#define ZSOCK_POLLHUP 0x10
61#define ZSOCK_POLLNVAL 0x20
69#define ZSOCK_MSG_PEEK 0x02
72#define ZSOCK_MSG_CTRUNC 0x08
76#define ZSOCK_MSG_TRUNC 0x20
78#define ZSOCK_MSG_DONTWAIT 0x40
80#define ZSOCK_MSG_WAITALL 0x100
87/* Well-known values, e.g. from Linux man 2 shutdown:
88 * "The constants SHUT_RD, SHUT_WR, SHUT_RDWR have the value 0, 1, 2,
89 * respectively". Some software uses numeric values.
90 */
92#define ZSOCK_SHUT_RD 0
94#define ZSOCK_SHUT_WR 1
96#define ZSOCK_SHUT_RDWR 2
113#define SOL_TLS 282
114
119#define TLS_SEC_TAG_LIST 1
124#define TLS_HOSTNAME 2
130#define TLS_CIPHERSUITE_LIST 3
135#define TLS_CIPHERSUITE_USED 4
146#define TLS_PEER_VERIFY 5
155#define TLS_DTLS_ROLE 6
161#define TLS_ALPN_LIST 7
166#define TLS_DTLS_HANDSHAKE_TIMEOUT_MIN 8
167
172#define TLS_DTLS_HANDSHAKE_TIMEOUT_MAX 9
173
178#define TLS_CERT_NOCOPY 10
189#define TLS_NATIVE 11
194#define TLS_SESSION_CACHE 12
198#define TLS_SESSION_CACHE_PURGE 13
210#define TLS_DTLS_CID 14
220#define TLS_DTLS_CID_STATUS 15
225#define TLS_DTLS_CID_VALUE 16
232#define TLS_DTLS_PEER_CID_VALUE 17
240#define TLS_DTLS_HANDSHAKE_ON_CONNECT 18
250#define TLS_CERT_VERIFY_RESULT 19
263#define TLS_CERT_VERIFY_CALLBACK 20
264
265/* Valid values for @ref TLS_PEER_VERIFY option */
266#define TLS_PEER_VERIFY_NONE 0
267#define TLS_PEER_VERIFY_OPTIONAL 1
268#define TLS_PEER_VERIFY_REQUIRED 2
270/* Valid values for @ref TLS_DTLS_ROLE option */
271#define TLS_DTLS_ROLE_CLIENT 0
272#define TLS_DTLS_ROLE_SERVER 1
274/* Valid values for @ref TLS_CERT_NOCOPY option */
275#define TLS_CERT_NOCOPY_NONE 0
276#define TLS_CERT_NOCOPY_OPTIONAL 1
278/* Valid values for @ref TLS_SESSION_CACHE option */
279#define TLS_SESSION_CACHE_DISABLED 0
280#define TLS_SESSION_CACHE_ENABLED 1
282/* Valid values for @ref TLS_DTLS_CID (Connection ID) option */
283#define TLS_DTLS_CID_DISABLED 0
284#define TLS_DTLS_CID_SUPPORTED 1
285#define TLS_DTLS_CID_ENABLED 2
287/* Valid values for @ref TLS_DTLS_CID_STATUS option */
288#define TLS_DTLS_CID_STATUS_DISABLED 0
289#define TLS_DTLS_CID_STATUS_DOWNLINK 1
290#define TLS_DTLS_CID_STATUS_UPLINK 2
291#define TLS_DTLS_CID_STATUS_BIDIRECTIONAL 3
300 void *cb;
301
303 void *ctx;
304};
/* for @name */ /* for @defgroup */
307
326 struct sockaddr _ai_addr;
327 char _ai_canonname[DNS_MAX_NAME_SIZE + 1];
329};
330
367__syscall void *zsock_get_context_object(int sock);
368
384__syscall int zsock_socket(int family, int type, int proto);
385
396__syscall int zsock_socketpair(int family, int type, int proto, int *sv);
397
407__syscall int zsock_close(int sock);
408
420__syscall int zsock_shutdown(int sock, int how);
421
432__syscall int zsock_bind(int sock, const struct sockaddr *addr,
433 socklen_t addrlen);
434
445__syscall int zsock_connect(int sock, const struct sockaddr *addr,
446 socklen_t addrlen);
447
458__syscall int zsock_listen(int sock, int backlog);
459
470__syscall int zsock_accept(int sock, struct sockaddr *addr, socklen_t *addrlen);
471
482__syscall ssize_t zsock_sendto(int sock, const void *buf, size_t len,
483 int flags, const struct sockaddr *dest_addr,
484 socklen_t addrlen);
485
496static inline ssize_t zsock_send(int sock, const void *buf, size_t len,
497 int flags)
498{
499 return zsock_sendto(sock, buf, len, flags, NULL, 0);
500}
501
512__syscall ssize_t zsock_sendmsg(int sock, const struct msghdr *msg,
513 int flags);
514
525__syscall ssize_t zsock_recvfrom(int sock, void *buf, size_t max_len,
526 int flags, struct sockaddr *src_addr,
527 socklen_t *addrlen);
528
539__syscall ssize_t zsock_recvmsg(int sock, struct msghdr *msg, int flags);
540
551static inline ssize_t zsock_recv(int sock, void *buf, size_t max_len,
552 int flags)
553{
554 return zsock_recvfrom(sock, buf, max_len, flags, NULL, NULL);
555}
556
567__syscall int zsock_fcntl_impl(int sock, int cmd, int flags);
568
571/*
572 * Need this wrapper because newer GCC versions got too smart and "typecheck"
573 * even macros.
574 */
575static inline int zsock_fcntl_wrapper(int sock, int cmd, ...)
576{
577 va_list args;
578 int flags;
579
580 va_start(args, cmd);
581 flags = va_arg(args, int);
582 va_end(args);
583 return zsock_fcntl_impl(sock, cmd, flags);
584}
585
586#define zsock_fcntl zsock_fcntl_wrapper
587
605__syscall int zsock_ioctl_impl(int sock, unsigned long request, va_list ap);
606
609static inline int zsock_ioctl_wrapper(int sock, unsigned long request, ...)
610{
611 int ret;
612 va_list args;
613
614 va_start(args, request);
615 ret = zsock_ioctl_impl(sock, request, args);
616 va_end(args);
617
618 return ret;
619}
620
621#define zsock_ioctl zsock_ioctl_wrapper
622
636static inline int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout)
637{
638 return zvfs_poll(fds, nfds, timeout);
639}
640
654__syscall int zsock_getsockopt(int sock, int level, int optname,
655 void *optval, socklen_t *optlen);
656
670__syscall int zsock_setsockopt(int sock, int level, int optname,
671 const void *optval, socklen_t optlen);
672
683__syscall int zsock_getpeername(int sock, struct sockaddr *addr,
684 socklen_t *addrlen);
685
696__syscall int zsock_getsockname(int sock, struct sockaddr *addr,
697 socklen_t *addrlen);
698
709__syscall int zsock_gethostname(char *buf, size_t len);
710
721static inline char *zsock_inet_ntop(sa_family_t family, const void *src,
722 char *dst, size_t size)
723{
724 return net_addr_ntop(family, src, dst, size);
725}
726
737__syscall int zsock_inet_pton(sa_family_t family, const char *src, void *dst);
738
740__syscall int z_zsock_getaddrinfo_internal(const char *host,
741 const char *service,
742 const struct zsock_addrinfo *hints,
743 struct zsock_addrinfo *res);
746/* Flags for getaddrinfo() hints. */
747
753#define AI_PASSIVE 0x1
755#define AI_CANONNAME 0x2
757#define AI_NUMERICHOST 0x4
759#define AI_V4MAPPED 0x8
761#define AI_ALL 0x10
763#define AI_ADDRCONFIG 0x20
765#define AI_NUMERICSERV 0x400
767#define AI_EXTFLAGS 0x800
780int zsock_getaddrinfo(const char *host, const char *service,
781 const struct zsock_addrinfo *hints,
782 struct zsock_addrinfo **res);
783
795
806const char *zsock_gai_strerror(int errcode);
807
813#define NI_NUMERICHOST 1
815#define NI_NUMERICSERV 2
817#define NI_NOFQDN 4
819#define NI_NAMEREQD 8
821#define NI_DGRAM 16
822
823/* POSIX extensions */
824
826#ifndef NI_MAXHOST
827#define NI_MAXHOST 64
828#endif
841int zsock_getnameinfo(const struct sockaddr *addr, socklen_t addrlen,
842 char *host, socklen_t hostlen,
843 char *serv, socklen_t servlen, int flags);
844
850#if defined(CONFIG_NET_INTERFACE_NAME)
851#define IFNAMSIZ CONFIG_NET_INTERFACE_NAME_LEN
852#else
853#define IFNAMSIZ Z_DEVICE_MAX_NAME_LEN
854#endif
855
857struct ifreq {
859};
867#define SOL_SOCKET 1
868
869/* Socket options for SOL_SOCKET level */
870
872#define SO_DEBUG 1
874#define SO_REUSEADDR 2
876#define SO_TYPE 3
878#define SO_ERROR 4
880#define SO_DONTROUTE 5
882#define SO_BROADCAST 6
883
885#define SO_SNDBUF 7
887#define SO_RCVBUF 8
888
890#define SO_KEEPALIVE 9
892#define SO_OOBINLINE 10
894#define SO_PRIORITY 12
896#define SO_LINGER 13
898#define SO_REUSEPORT 15
899
901#define SO_RCVLOWAT 18
903#define SO_SNDLOWAT 19
904
909#define SO_RCVTIMEO 20
911#define SO_SNDTIMEO 21
912
914#define SO_BINDTODEVICE 25
915
917#define SO_ACCEPTCONN 30
918
920#define SO_TIMESTAMPING 37
921
923#define SO_PROTOCOL 38
924
926#define SO_DOMAIN 39
927
929#define SO_SOCKS5 60
930
932#define SO_TXTIME 61
934#define SCM_TXTIME SO_TXTIME
935
939#define SOF_TIMESTAMPING_RX_HARDWARE BIT(0)
944#define SOF_TIMESTAMPING_TX_HARDWARE BIT(1)
945
954/* Socket options for IPPROTO_TCP level */
956#define TCP_NODELAY 1
958#define TCP_KEEPIDLE 2
960#define TCP_KEEPINTVL 3
962#define TCP_KEEPCNT 4
963
970/* Socket options for IPPROTO_IP level */
972#define IP_TOS 1
973
975#define IP_TTL 2
976
981#define IP_PKTINFO 8
982
990 unsigned int ipi_ifindex;
993};
994
998#define IP_RECVTTL 12
999
1004#define IP_MTU 14
1005
1007#define IP_MULTICAST_IF 32
1009#define IP_MULTICAST_TTL 33
1011#define IP_MULTICAST_LOOP 34
1013#define IP_ADD_MEMBERSHIP 35
1015#define IP_DROP_MEMBERSHIP 36
1016
1025
1033
1035#define IP_LOCAL_PORT_RANGE 51
1036
1043/* Socket options for IPPROTO_IPV6 level */
1045#define IPV6_UNICAST_HOPS 16
1046
1048#define IPV6_MULTICAST_IF 17
1049
1051#define IPV6_MULTICAST_HOPS 18
1052
1054#define IPV6_MULTICAST_LOOP 19
1055
1057#define IPV6_ADD_MEMBERSHIP 20
1058
1060#define IPV6_DROP_MEMBERSHIP 21
1061
1063#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
1064
1066#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
1067
1078
1084#define IPV6_MTU 24
1085
1087#define IPV6_V6ONLY 26
1088
1093#define IPV6_RECVPKTINFO 49
1094
1096#define IPV6_PKTINFO 50
1097
1101#define IPV6_RECVHOPLIMIT 51
1102
1104#define IPV6_HOPLIMIT 52
1105
1107#define IPV6_ADDR_PREFERENCES 72
1108
1110#define IPV6_PREFER_SRC_TMP 0x0001
1112#define IPV6_PREFER_SRC_PUBLIC 0x0002
1117#define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100
1119#define IPV6_PREFER_SRC_COA 0x0004
1121#define IPV6_PREFER_SRC_HOME 0x0400
1123#define IPV6_PREFER_SRC_CGA 0x0008
1125#define IPV6_PREFER_SRC_NONCGA 0x0800
1126
1135 unsigned int ipi6_ifindex;
1136};
1137
1139#define IPV6_TCLASS 67
1147#define SOMAXCONN 128
1155#define IN6_IS_ADDR_UNSPECIFIED(addr) \
1156 net_ipv6_addr_cmp(net_ipv6_unspecified_address(), addr)
1157
1159#define IN6_IS_ADDR_LOOPBACK(addr) net_ipv6_is_addr_loopback(addr)
1160
1162#define IN6_IS_ADDR_MULTICAST(addr) net_ipv6_is_addr_mcast(addr)
1163
1165#define IN6_IS_ADDR_LINKLOCAL(addr) net_ipv6_is_ll_addr(addr)
1166
1168#define IN6_IS_ADDR_SITELOCAL(addr) net_ipv6_is_sl_addr(addr)
1169
1171#define IN6_IS_ADDR_V4MAPPED(addr) net_ipv6_addr_is_v4_mapped(addr)
1172
1174#define IN6_IS_ADDR_MC_GLOBAL(addr) net_ipv6_is_addr_mcast_global(addr)
1175
1177#define IN6_IS_ADDR_MC_NODELOCAL(addr) net_ipv6_is_addr_mcast_iface(addr)
1178
1180#define IN6_IS_ADDR_MC_LINKLOCAL(addr) net_ipv6_is_addr_mcast_link(addr)
1181
1183#define IN6_IS_ADDR_MC_SITELOCAL(addr) net_ipv6_is_addr_mcast_site(addr)
1184
1186#define IN6_IS_ADDR_MC_ORGLOCAL(addr) net_ipv6_is_addr_mcast_org(addr)
1187
1194struct net_socket_register {
1195 int family;
1196 bool is_offloaded;
1197 bool (*is_supported)(int family, int type, int proto);
1198 int (*handler)(int family, int type, int proto);
1199#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1200 /* Store also the name of the socket type in order to be able to
1201 * print it later.
1202 */
1203 const char * const name;
1204#endif
1205};
1206
1207#define NET_SOCKET_DEFAULT_PRIO CONFIG_NET_SOCKETS_PRIORITY_DEFAULT
1208
1209#define NET_SOCKET_GET_NAME(socket_name, prio) \
1210 __net_socket_register_##prio##_##socket_name
1211
1212#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1213#define K_OBJ_TYPE_SOCK K_OBJ_TYPE_ID_GEN("SOCK")
1214
1215#define NET_SOCKET_REGISTER_NAME(_name) \
1216 .name = STRINGIFY(_name),
1217#else
1218#define NET_SOCKET_REGISTER_NAME(_name)
1219#endif
1220
1221#define _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, _is_offloaded) \
1222 static const STRUCT_SECTION_ITERABLE(net_socket_register, \
1223 NET_SOCKET_GET_NAME(socket_name, prio)) = { \
1224 .family = _family, \
1225 .is_offloaded = _is_offloaded, \
1226 .is_supported = _is_supported, \
1227 .handler = _handler, \
1228 NET_SOCKET_REGISTER_NAME(socket_name) \
1229 }
1230
1231#define NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1232 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, false)
1233
1234#define NET_SOCKET_OFFLOAD_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1235 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, true)
1236
1237struct socket_op_vtable {
1238 struct fd_op_vtable fd_vtable;
1239 int (*shutdown)(void *obj, int how);
1240 int (*bind)(void *obj, const struct sockaddr *addr, socklen_t addrlen);
1241 int (*connect)(void *obj, const struct sockaddr *addr,
1242 socklen_t addrlen);
1243 int (*listen)(void *obj, int backlog);
1244 int (*accept)(void *obj, struct sockaddr *addr, socklen_t *addrlen);
1245 ssize_t (*sendto)(void *obj, const void *buf, size_t len, int flags,
1246 const struct sockaddr *dest_addr, socklen_t addrlen);
1247 ssize_t (*recvfrom)(void *obj, void *buf, size_t max_len, int flags,
1248 struct sockaddr *src_addr, socklen_t *addrlen);
1249 int (*getsockopt)(void *obj, int level, int optname,
1250 void *optval, socklen_t *optlen);
1251 int (*setsockopt)(void *obj, int level, int optname,
1252 const void *optval, socklen_t optlen);
1253 ssize_t (*sendmsg)(void *obj, const struct msghdr *msg, int flags);
1254 ssize_t (*recvmsg)(void *obj, struct msghdr *msg, int flags);
1255 int (*getpeername)(void *obj, struct sockaddr *addr,
1256 socklen_t *addrlen);
1257 int (*getsockname)(void *obj, struct sockaddr *addr,
1258 socklen_t *addrlen);
1259};
1260
1263#ifdef __cplusplus
1264}
1265#endif
1266
1267#include <zephyr/syscalls/socket.h>
1268
1273/* Avoid circular loops with POSIX socket headers.
1274 * We have these includes here so that we do not need
1275 * to change the applications that were only including
1276 * zephyr/net/socket.h header file.
1277 *
1278 * Additionally, if non-zephyr-prefixed headers are used here,
1279 * native_sim pulls in those from the host rather than Zephyr's.
1280 */
1281#if defined(CONFIG_POSIX_API)
1282#if !defined(ZEPHYR_INCLUDE_POSIX_ARPA_INET_H_)
1283#include <zephyr/posix/arpa/inet.h>
1284#endif
1285#if !defined(ZEPHYR_INCLUDE_POSIX_NETDB_H_)
1286#include <zephyr/posix/netdb.h>
1287#endif
1288#if !defined(ZEPHYR_INCLUDE_POSIX_UNISTD_H_)
1289#include <zephyr/posix/unistd.h>
1290#endif
1291#if !defined(ZEPHYR_INCLUDE_POSIX_POLL_H_)
1292#include <zephyr/posix/poll.h>
1293#endif
1294#if !defined(ZEPHYR_INCLUDE_POSIX_SYS_SOCKET_H_)
1296#endif
1297#endif /* CONFIG_POSIX_API */
1298
1299#endif /* ZEPHYR_INCLUDE_NET_SOCKET_H_ */
DNS resolving library.
int zvfs_poll(struct zvfs_pollfd *fds, int nfds, int poll_timeout)
int zsock_ioctl_impl(int sock, unsigned long request, va_list ap)
Control underlying socket parameters.
int zsock_getpeername(int sock, struct sockaddr *addr, socklen_t *addrlen)
Get peer name.
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.
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 ssize_t zsock_send(int sock, const void *buf, size_t len, int flags)
Send data to a connected peer.
Definition socket.h:496
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:636
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.
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:551
int zsock_gethostname(char *buf, size_t len)
Get local host name.
int zsock_getsockname(int sock, struct sockaddr *addr, socklen_t *addrlen)
Get socket name.
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.
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:853
int zsock_setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen)
Set various socket options.
ssize_t zsock_sendmsg(int sock, const struct msghdr *msg, int flags)
Send data to an arbitrary network address.
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:721
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.
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.
#define DNS_MAX_NAME_SIZE
Max size of the resolved name.
Definition dns_resolve.h:69
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
#define NULL
Definition iar_missing_defs.h:20
Public kernel APIs.
__SIZE_TYPE__ ssize_t
Definition types.h:28
IPv6 and IPv4 definitions.
flags
Definition parser.h:97
int bind(int sock, const struct sockaddr *addr, socklen_t addrlen)
ssize_t recvfrom(int sock, void *buf, size_t max_len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen)
int getpeername(int sock, struct sockaddr *addr, socklen_t *addrlen)
int accept(int sock, struct sockaddr *addr, socklen_t *addrlen)
int listen(int sock, int backlog)
int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen)
ssize_t sendmsg(int sock, const struct msghdr *message, int flags)
int shutdown(int sock, int how)
int connect(int sock, const struct sockaddr *addr, socklen_t addrlen)
int getsockname(int sock, struct sockaddr *addr, socklen_t *addrlen)
ssize_t sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
ssize_t recvmsg(int sock, struct msghdr *msg, int flags)
BSD select support functions.
#define bool
Definition stdbool.h:13
File descriptor virtual method table.
Definition fdtable.h:79
Interface description structure.
Definition socket.h:857
char ifr_name[Z_DEVICE_MAX_NAME_LEN]
Network interface name.
Definition socket.h:858
IPv6 address struct.
Definition net_ip.h:143
Incoming IPv6 packet information.
Definition socket.h:1133
struct in6_addr ipi6_addr
Destination IPv6 address.
Definition socket.h:1134
unsigned int ipi6_ifindex
Receive interface index.
Definition socket.h:1135
IPv4 address struct.
Definition net_ip.h:155
Incoming IPv4 packet information.
Definition socket.h:989
unsigned int ipi_ifindex
Network interface index.
Definition socket.h:990
struct in_addr ipi_spec_dst
Local address.
Definition socket.h:991
struct in_addr ipi_addr
Header Destination address.
Definition socket.h:992
Struct used when setting a IPv4 multicast network interface.
Definition socket.h:1029
struct in_addr imr_interface
IP address of local interface.
Definition socket.h:1031
struct in_addr imr_multiaddr
IP multicast group address.
Definition socket.h:1030
Struct used when joining or leaving a IPv4 multicast group.
Definition socket.h:1020
int imr_ifindex
Network interface index.
Definition socket.h:1023
struct in_addr imr_multiaddr
IP multicast group address.
Definition socket.h:1021
struct in_addr imr_address
IP address of local interface.
Definition socket.h:1022
Struct used when joining or leaving a IPv6 multicast group.
Definition socket.h:1071
struct in6_addr ipv6mr_multiaddr
IPv6 multicast address of group.
Definition socket.h:1073
int ipv6mr_ifindex
Network interface index of the local IPv6 address.
Definition socket.h:1076
Message struct.
Definition net_ip.h:257
Generic sockaddr struct.
Definition net_ip.h:410
Data structure for TLS_CERT_VERIFY_CALLBACK socket option.
Definition socket.h:294
void * cb
A pointer to the certificate verification callback function.
Definition socket.h:300
void * ctx
A pointer to an opaque context passed to the callback.
Definition socket.h:303
Definition used when querying address information.
Definition socket.h:314
struct zsock_addrinfo * ai_next
Pointer to next address entry.
Definition socket.h:315
int ai_family
Address family of the returned addresses.
Definition socket.h:317
int ai_flags
Additional options.
Definition socket.h:316
char * ai_canonname
Optional official name of the host.
Definition socket.h:323
int ai_protocol
Protocol for addresses, 0 means any protocol.
Definition socket.h:319
struct sockaddr * ai_addr
Pointer to the address.
Definition socket.h:322
int ai_socktype
Socket type, for example SOCK_STREAM or SOCK_DGRAM.
Definition socket.h:318
int ai_eflags
Extended flags for special usage.
Definition socket.h:320
socklen_t ai_addrlen
Length of the socket address.
Definition socket.h:321
Definition of the monitored socket/file descriptor.
Definition socket_poll.h:31