Zephyr API Documentation 4.5.0-rc1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
socket.h
Go to the documentation of this file.
1
7
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
28
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
63
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
82
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
98
109
113#define ZSOCK_SOL_TLS 282
114
119#define ZSOCK_TLS_SEC_TAG_LIST 1
124#define ZSOCK_TLS_HOSTNAME 2
130#define ZSOCK_TLS_CIPHERSUITE_LIST 3
135#define ZSOCK_TLS_CIPHERSUITE_USED 4
146#define ZSOCK_TLS_PEER_VERIFY 5
155#define ZSOCK_TLS_DTLS_ROLE 6
161#define ZSOCK_TLS_ALPN_LIST 7
166#define ZSOCK_TLS_DTLS_HANDSHAKE_TIMEOUT_MIN 8
167
172#define ZSOCK_TLS_DTLS_HANDSHAKE_TIMEOUT_MAX 9
173
178#define ZSOCK_TLS_CERT_NOCOPY 10
189#define ZSOCK_TLS_NATIVE 11
200#define ZSOCK_TLS_SESSION_CACHE 12
204#define ZSOCK_TLS_SESSION_CACHE_PURGE 13
216#define ZSOCK_TLS_DTLS_CID 14
226#define ZSOCK_TLS_DTLS_CID_STATUS 15
231#define ZSOCK_TLS_DTLS_CID_VALUE 16
238#define ZSOCK_TLS_DTLS_PEER_CID_VALUE 17
246#define ZSOCK_TLS_DTLS_HANDSHAKE_ON_CONNECT 18
256#define ZSOCK_TLS_CERT_VERIFY_RESULT 19
269#define ZSOCK_TLS_CERT_VERIFY_CALLBACK 20
282#define ZSOCK_TLS_MAX_FRAGMENT_LENGTH 21
283
284/* Valid values for @ref ZSOCK_TLS_MAX_FRAGMENT_LENGTH option */
285#define ZSOCK_TLS_MFL_DEFAULT -1
286#define ZSOCK_TLS_MFL_DISABLED 0
287#define ZSOCK_TLS_MFL_512 1
288#define ZSOCK_TLS_MFL_1024 2
289#define ZSOCK_TLS_MFL_2048 3
290#define ZSOCK_TLS_MFL_4096 4
291
292/* Valid values for @ref TLS_PEER_VERIFY option */
293#define ZSOCK_TLS_PEER_VERIFY_NONE 0
294#define ZSOCK_TLS_PEER_VERIFY_OPTIONAL 1
295#define ZSOCK_TLS_PEER_VERIFY_REQUIRED 2
296
297/* Valid values for @ref TLS_DTLS_ROLE option */
298#define ZSOCK_TLS_DTLS_ROLE_CLIENT 0
299#define ZSOCK_TLS_DTLS_ROLE_SERVER 1
300
301/* Valid values for @ref TLS_CERT_NOCOPY option */
302#define ZSOCK_TLS_CERT_NOCOPY_NONE 0
303#define ZSOCK_TLS_CERT_NOCOPY_OPTIONAL 1
304
305/* Valid values for @ref TLS_SESSION_CACHE option */
306#define ZSOCK_TLS_SESSION_CACHE_DISABLED 0
307#define ZSOCK_TLS_SESSION_CACHE_ENABLED 1
308
309/* Valid values for @ref TLS_DTLS_CID (Connection ID) option */
310#define ZSOCK_TLS_DTLS_CID_DISABLED 0
311#define ZSOCK_TLS_DTLS_CID_SUPPORTED 1
312#define ZSOCK_TLS_DTLS_CID_ENABLED 2
313
314/* Valid values for @ref TLS_DTLS_CID_STATUS option */
315#define ZSOCK_TLS_DTLS_CID_STATUS_DISABLED 0
316#define ZSOCK_TLS_DTLS_CID_STATUS_DOWNLINK 1
317#define ZSOCK_TLS_DTLS_CID_STATUS_UPLINK 2
318#define ZSOCK_TLS_DTLS_CID_STATUS_BIDIRECTIONAL 3
319
327 void *cb;
328
330 void *ctx;
331};
332 /* for @name */ /* for @defgroup */
334
351
353 struct net_sockaddr_storage _ai_addr;
354 char _ai_canonname[DNS_MAX_NAME_SIZE + 1];
356};
357
394__syscall void *zsock_get_context_object(int sock);
395
397
398/* Offloaded sockets bind their local port in the offload engine, outside the
399 * net_context list, so net_context_port_in_use() cannot see them. The socket
400 * layer tracks those bindings and answers this query for them.
401 */
402#if defined(CONFIG_NET_SOCKETS_OFFLOAD_PORT_TRACKING)
403bool net_socket_offloaded_port_in_use(enum net_ip_protocol ip_proto, uint16_t local_port,
404 const struct net_sockaddr *local_addr);
405#else
406static inline bool net_socket_offloaded_port_in_use(enum net_ip_protocol ip_proto,
407 uint16_t local_port,
408 const struct net_sockaddr *local_addr)
409{
410 ARG_UNUSED(ip_proto);
411 ARG_UNUSED(local_port);
412 ARG_UNUSED(local_addr);
413
414 return false;
415}
416#endif /* CONFIG_NET_SOCKETS_OFFLOAD_PORT_TRACKING */
417
418/* Port-in-use check across both socket backends: native sockets tracked by
419 * net_context and offloaded sockets tracked by the socket layer.
420 */
421bool net_socket_port_in_use(enum net_ip_protocol ip_proto, uint16_t local_port,
422 const struct net_sockaddr *local_addr);
423
425
441__syscall int zsock_socket(int family, int type, int proto);
442
453__syscall int zsock_socketpair(int family, int type, int proto, int *sv);
454
464__syscall int zsock_close(int sock);
465
477__syscall int zsock_shutdown(int sock, int how);
478
489__syscall int zsock_bind(int sock, const struct net_sockaddr *addr,
490 net_socklen_t addrlen);
491
502__syscall int zsock_connect(int sock, const struct net_sockaddr *addr,
503 net_socklen_t addrlen);
504
515__syscall int zsock_listen(int sock, int backlog);
516
527__syscall int zsock_accept(int sock, struct net_sockaddr *addr, net_socklen_t *addrlen);
528
539__syscall ssize_t zsock_sendto(int sock, const void *buf, size_t len,
540 int flags, const struct net_sockaddr *dest_addr,
541 net_socklen_t addrlen);
542
553static inline ssize_t zsock_send(int sock, const void *buf, size_t len,
554 int flags)
555{
556 return zsock_sendto(sock, buf, len, flags, NULL, 0);
557}
558
569__syscall ssize_t zsock_sendmsg(int sock, const struct net_msghdr *msg,
570 int flags);
571
582__syscall ssize_t zsock_recvfrom(int sock, void *buf, size_t max_len,
583 int flags, struct net_sockaddr *src_addr,
584 net_socklen_t *addrlen);
585
596__syscall ssize_t zsock_recvmsg(int sock, struct net_msghdr *msg, int flags);
597
608static inline ssize_t zsock_recv(int sock, void *buf, size_t max_len,
609 int flags)
610{
611 return zsock_recvfrom(sock, buf, max_len, flags, NULL, NULL);
612}
613
624__syscall int zsock_fcntl_impl(int sock, int cmd, int flags);
625
627
628/*
629 * Need this wrapper because newer GCC versions got too smart and "typecheck"
630 * even macros.
631 */
632static inline int zsock_fcntl_wrapper(int sock, int cmd, ...)
633{
634 va_list args;
635 int flags;
636
637 va_start(args, cmd);
638 flags = va_arg(args, int);
639 va_end(args);
640 return zsock_fcntl_impl(sock, cmd, flags);
641}
642
643#define zsock_fcntl zsock_fcntl_wrapper
644
646
663__syscall int zsock_ioctl_impl(int sock, unsigned long request, va_list ap);
664
666
667static inline int zsock_ioctl_wrapper(int sock, unsigned long request, ...)
668{
669 int ret;
670 va_list args;
671
672 va_start(args, request);
673 ret = zsock_ioctl_impl(sock, request, args);
674 va_end(args);
675
676 return ret;
677}
678
679#define zsock_ioctl zsock_ioctl_wrapper
680
682
694static inline int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout)
695{
696 return zvfs_poll(fds, nfds, timeout);
697}
698
712__syscall int zsock_getsockopt(int sock, int level, int optname,
713 void *optval, net_socklen_t *optlen);
714
728__syscall int zsock_setsockopt(int sock, int level, int optname,
729 const void *optval, net_socklen_t optlen);
730
741__syscall int zsock_getpeername(int sock, struct net_sockaddr *addr,
742 net_socklen_t *addrlen);
743
754__syscall int zsock_getsockname(int sock, struct net_sockaddr *addr,
755 net_socklen_t *addrlen);
756
767__syscall int zsock_gethostname(char *buf, size_t len);
768
779static inline char *zsock_inet_ntop(net_sa_family_t family, const void *src,
780 char *dst, size_t size)
781{
782 return net_addr_ntop(family, src, dst, size);
783}
784
795__syscall int zsock_inet_pton(net_sa_family_t family, const char *src, void *dst);
796
798__syscall int z_zsock_getaddrinfo_internal(const char *host,
799 const char *service,
800 const struct zsock_addrinfo *hints,
801 struct zsock_addrinfo *res);
803
804/* Flags for getaddrinfo() hints. */
805
811#define ZSOCK_AI_PASSIVE 0x1
813#define ZSOCK_AI_CANONNAME 0x2
815#define ZSOCK_AI_NUMERICHOST 0x4
817#define ZSOCK_AI_V4MAPPED 0x8
819#define ZSOCK_AI_ALL 0x10
821#define ZSOCK_AI_ADDRCONFIG 0x20
823#define ZSOCK_AI_NUMERICSERV 0x400
825#define ZSOCK_AI_EXTFLAGS 0x800
827
838int zsock_getaddrinfo(const char *host, const char *service,
839 const struct zsock_addrinfo *hints,
840 struct zsock_addrinfo **res);
841
853
864const char *zsock_gai_strerror(int errcode);
865
871#define ZSOCK_NI_NUMERICHOST 1
873#define ZSOCK_NI_NUMERICSERV 2
875#define ZSOCK_NI_NOFQDN 4
877#define ZSOCK_NI_NAMEREQD 8
879#define ZSOCK_NI_DGRAM 16
880
881/* POSIX extensions */
882
884#ifndef ZSOCK_NI_MAXHOST
885#define ZSOCK_NI_MAXHOST 64
886#endif
888
899int zsock_getnameinfo(const struct net_sockaddr *addr, net_socklen_t addrlen,
900 char *host, net_socklen_t hostlen,
901 char *serv, net_socklen_t servlen, int flags);
902
927int zsock_send_all(int sock, const void *buf, size_t len, int flags,
928 k_timeout_t timeout, size_t *sent_len);
929
953int zsock_sendmsg_all(int sock, const struct net_msghdr *msg, int flags,
954 k_timeout_t timeout, size_t *sent_len);
955
961#define ZSOCK_SOL_SOCKET 1
962
963/* Socket options for SOL_SOCKET level */
964
966#define ZSOCK_SO_DEBUG 1
968#define ZSOCK_SO_REUSEADDR 2
970#define ZSOCK_SO_TYPE 3
972#define ZSOCK_SO_ERROR 4
974#define ZSOCK_SO_DONTROUTE 5
976#define ZSOCK_SO_BROADCAST 6
977
979#define ZSOCK_SO_SNDBUF 7
981#define ZSOCK_SO_RCVBUF 8
982
984#define ZSOCK_SO_KEEPALIVE 9
986#define ZSOCK_SO_OOBINLINE 10
988#define ZSOCK_SO_PRIORITY 12
990#define ZSOCK_SO_LINGER 13
992#define ZSOCK_SO_REUSEPORT 15
993
995#define ZSOCK_SO_RCVLOWAT 18
997#define ZSOCK_SO_SNDLOWAT 19
998
1003#define ZSOCK_SO_RCVTIMEO 20
1005#define ZSOCK_SO_SNDTIMEO 21
1006
1008#define ZSOCK_SO_BINDTODEVICE 25
1009
1011#define ZSOCK_SO_ACCEPTCONN 30
1012
1014#define ZSOCK_SO_TIMESTAMPING 37
1015
1017#define ZSOCK_SO_PROTOCOL 38
1018
1020#define ZSOCK_SO_DOMAIN 39
1021
1023#define ZSOCK_SO_SOCKS5 60
1024
1026#define ZSOCK_SO_TXTIME 61
1028#define ZSOCK_SCM_TXTIME ZSOCK_SO_TXTIME
1029
1031
1033#define ZSOCK_SOF_TIMESTAMPING_RX_HARDWARE BIT(0)
1038#define ZSOCK_SOF_TIMESTAMPING_TX_HARDWARE BIT(1)
1039
1041
1043
1048/* Socket options for NET_IPPROTO_TCP level */
1050#define ZSOCK_TCP_NODELAY 1
1052#define ZSOCK_TCP_KEEPIDLE 2
1054#define ZSOCK_TCP_KEEPINTVL 3
1056#define ZSOCK_TCP_KEEPCNT 4
1057
1059
1064/* Socket options for NET_IPPROTO_UDP level */
1065
1067#define ZSOCK_UDP_OPT 1
1069#define ZSOCK_UDP_OPT_OCS 2
1071#define ZSOCK_UDP_OPT_APC 3
1073#define ZSOCK_UDP_OPT_FRAG 4
1075#define ZSOCK_UDP_OPT_MDS 5
1077#define ZSOCK_UDP_OPT_MRDS 6
1079#define ZSOCK_UDP_OPT_REQ 7
1081#define ZSOCK_UDP_OPT_RES 8
1083#define ZSOCK_UDP_OPT_TIME 9
1085#define ZSOCK_UDP_OPT_AUTH 10
1087#define ZSOCK_UDP_OPT_EXP 11
1089#define ZSOCK_UDP_OPT_UCMP 12
1091#define ZSOCK_UDP_OPT_UENC 13
1093#define ZSOCK_UDP_OPT_UEXP 14
1095#define ZSOCK_UDP_OPT_DPLPMTUD 15
1097#define ZSOCK_UDP_OPT_DPLPMTUD_APP_RESPOND 16
1098
1100#define ZSOCK_UDP_OPT_CMSG_APC 1
1101#define ZSOCK_UDP_OPT_CMSG_MDS 2
1102#define ZSOCK_UDP_OPT_CMSG_MRDS 3
1103#define ZSOCK_UDP_OPT_CMSG_REQ 4
1104#define ZSOCK_UDP_OPT_CMSG_RES 5
1105#define ZSOCK_UDP_OPT_CMSG_TIME 6
1106
1108
1114
1119
1120/* Socket options for NET_IPPROTO_IP level */
1122#define ZSOCK_IP_TOS 1
1123
1125#define ZSOCK_IP_TTL 2
1126
1131#define ZSOCK_IP_PKTINFO 8
1132
1136#define ZSOCK_IP_RECVTTL 12
1137
1142#define ZSOCK_IP_MTU 14
1143
1157#define ZSOCK_IP_DONTFRAG 15
1158
1160#define ZSOCK_IP_MULTICAST_IF 32
1162#define ZSOCK_IP_MULTICAST_TTL 33
1164#define ZSOCK_IP_MULTICAST_LOOP 34
1166#define ZSOCK_IP_ADD_MEMBERSHIP 35
1168#define ZSOCK_IP_DROP_MEMBERSHIP 36
1169
1171#define ZSOCK_IP_LOCAL_PORT_RANGE 51
1172 /* for @name */ /* for @defgroup */
1175
1185/* Socket options for NET_IPPROTO_IPV6 level */
1187#define ZSOCK_IPV6_UNICAST_HOPS 16
1188
1190#define ZSOCK_IPV6_MULTICAST_IF 17
1191
1193#define ZSOCK_IPV6_MULTICAST_HOPS 18
1194
1196#define ZSOCK_IPV6_MULTICAST_LOOP 19
1197
1199#define ZSOCK_IPV6_ADD_MEMBERSHIP 20
1200
1202#define ZSOCK_IPV6_DROP_MEMBERSHIP 21
1203
1205#define ZSOCK_IPV6_JOIN_GROUP ZSOCK_IPV6_ADD_MEMBERSHIP
1206
1208#define ZSOCK_IPV6_LEAVE_GROUP ZSOCK_IPV6_DROP_MEMBERSHIP
1209
1215#define ZSOCK_IPV6_MTU 24
1216
1229#define ZSOCK_IPV6_DONTFRAG 62
1230
1232#define ZSOCK_IPV6_V6ONLY 26
1233
1238#define ZSOCK_IPV6_RECVPKTINFO 49
1239
1241#define ZSOCK_IPV6_PKTINFO 50
1242
1246#define ZSOCK_IPV6_RECVHOPLIMIT 51
1247
1249#define ZSOCK_IPV6_HOPLIMIT 52
1250
1252#define ZSOCK_IPV6_ADDR_PREFERENCES 72
1253
1255#define ZSOCK_IPV6_PREFER_SRC_TMP 0x0001
1257#define ZSOCK_IPV6_PREFER_SRC_PUBLIC 0x0002
1262#define ZSOCK_IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100
1264#define ZSOCK_IPV6_PREFER_SRC_COA 0x0004
1266#define ZSOCK_IPV6_PREFER_SRC_HOME 0x0400
1268#define ZSOCK_IPV6_PREFER_SRC_CGA 0x0008
1270#define ZSOCK_IPV6_PREFER_SRC_NONCGA 0x0800
1271
1273#define ZSOCK_IPV6_TCLASS 67 /* for @name */ /* for @defgroup */
1276
1282#define ZSOCK_SOMAXCONN 128
1284
1290#define ZSOCK_IN6_IS_ADDR_UNSPECIFIED(addr) \
1291 net_ipv6_addr_cmp(net_ipv6_unspecified_address(), addr)
1292
1294#define ZSOCK_IN6_IS_ADDR_LOOPBACK(addr) net_ipv6_is_addr_loopback(addr)
1295
1297#define ZSOCK_IN6_IS_ADDR_MULTICAST(addr) net_ipv6_is_addr_mcast(addr)
1298
1300#define ZSOCK_IN6_IS_ADDR_LINKLOCAL(addr) net_ipv6_is_ll_addr(addr)
1301
1303#define ZSOCK_IN6_IS_ADDR_SITELOCAL(addr) net_ipv6_is_sl_addr(addr)
1304
1306#define ZSOCK_IN6_IS_ADDR_V4MAPPED(addr) net_ipv6_addr_is_v4_mapped(addr)
1307
1309#define ZSOCK_IN6_IS_ADDR_MC_GLOBAL(addr) net_ipv6_is_addr_mcast_global(addr)
1310
1312#define ZSOCK_IN6_IS_ADDR_MC_NODELOCAL(addr) net_ipv6_is_addr_mcast_iface(addr)
1313
1315#define ZSOCK_IN6_IS_ADDR_MC_LINKLOCAL(addr) net_ipv6_is_addr_mcast_link(addr)
1316
1318#define ZSOCK_IN6_IS_ADDR_MC_SITELOCAL(addr) net_ipv6_is_addr_mcast_site(addr)
1319
1321#define ZSOCK_IN6_IS_ADDR_MC_ORGLOCAL(addr) net_ipv6_is_addr_mcast_org(addr)
1322
1324
1330
1335
1337#define ZSOCK_SOL_PACKET 263
1338
1340#define ZSOCK_PACKET_ADD_MEMBERSHIP 1
1341
1343#define ZSOCK_PACKET_DROP_MEMBERSHIP 2
1344 /* for @name */ /* for @defgroup */
1347
1352struct net_socket_register {
1353 int family;
1354 bool is_offloaded;
1355 bool (*is_supported)(int family, int type, int proto);
1356 int (*handler)(int family, int type, int proto);
1357#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1358 /* Store also the name of the socket type in order to be able to
1359 * print it later.
1360 */
1361 const char * const name;
1362#endif
1363};
1364
1365#define NET_SOCKET_DEFAULT_PRIO CONFIG_NET_SOCKETS_PRIORITY_DEFAULT
1366
1367#define NET_SOCKET_GET_NAME(socket_name, prio) \
1368 __net_socket_register_##prio##_##socket_name
1369
1370#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1371#define K_OBJ_TYPE_SOCK K_OBJ_TYPE_ID_GEN("SOCK")
1372
1373#define NET_SOCKET_REGISTER_NAME(_name) \
1374 .name = STRINGIFY(_name),
1375#else
1376#define NET_SOCKET_REGISTER_NAME(_name)
1377#endif
1378
1379#define _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, _is_offloaded) \
1380 static const STRUCT_SECTION_ITERABLE(net_socket_register, \
1381 NET_SOCKET_GET_NAME(socket_name, prio)) = { \
1382 .family = _family, \
1383 .is_offloaded = _is_offloaded, \
1384 .is_supported = _is_supported, \
1385 .handler = _handler, \
1386 NET_SOCKET_REGISTER_NAME(socket_name) \
1387 }
1388
1389#define NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1390 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, false)
1391
1392#define NET_SOCKET_OFFLOAD_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1393 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, true)
1394
1395struct socket_op_vtable {
1396 struct fd_op_vtable fd_vtable;
1397 int (*shutdown)(void *obj, int how);
1398 int (*bind)(void *obj, const struct net_sockaddr *addr, net_socklen_t addrlen);
1399 int (*connect)(void *obj, const struct net_sockaddr *addr,
1400 net_socklen_t addrlen);
1401 int (*listen)(void *obj, int backlog);
1402 int (*accept)(void *obj, struct net_sockaddr *addr, net_socklen_t *addrlen);
1403 ssize_t (*sendto)(void *obj, const void *buf, size_t len, int flags,
1404 const struct net_sockaddr *dest_addr, net_socklen_t addrlen);
1405 ssize_t (*recvfrom)(void *obj, void *buf, size_t max_len, int flags,
1406 struct net_sockaddr *src_addr, net_socklen_t *addrlen);
1407 int (*getsockopt)(void *obj, int level, int optname,
1408 void *optval, net_socklen_t *optlen);
1409 int (*setsockopt)(void *obj, int level, int optname,
1410 const void *optval, net_socklen_t optlen);
1411 ssize_t (*sendmsg)(void *obj, const struct net_msghdr *msg, int flags);
1412 ssize_t (*recvmsg)(void *obj, struct net_msghdr *msg, int flags);
1413 int (*getpeername)(void *obj, struct net_sockaddr *addr,
1414 net_socklen_t *addrlen);
1415 int (*getsockname)(void *obj, struct net_sockaddr *addr,
1416 net_socklen_t *addrlen);
1417};
1418
1420
1421#ifdef __cplusplus
1422}
1423#endif
1424
1425#include <zephyr/syscalls/socket.h>
1426
1430
1431#endif /* ZEPHYR_INCLUDE_NET_SOCKET_H_ */
APIs and macros for the Zephyr device model.
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.
ssize_t zsock_recvmsg(int sock, struct net_msghdr *msg, int flags)
Receive a message from an arbitrary network address.
int zsock_accept(int sock, struct net_sockaddr *addr, net_socklen_t *addrlen)
Accept a connection on listening socket.
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.
static ssize_t zsock_send(int sock, const void *buf, size_t len, int flags)
Send data to a connected peer.
Definition socket.h:553
int zsock_sendmsg_all(int sock, const struct net_msghdr *msg, int flags, k_timeout_t timeout, size_t *sent_len)
Send data to an arbitrary network address.
static int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout)
Efficiently poll multiple sockets for events.
Definition socket.h:694
int zsock_socket(int family, int type, int proto)
Create a network socket.
int zsock_getnameinfo(const struct net_sockaddr *addr, net_socklen_t addrlen, char *host, net_socklen_t hostlen, char *serv, net_socklen_t servlen, int flags)
Resolve a network address to a domain name or ASCII address.
int zsock_getsockopt(int sock, int level, int optname, void *optval, net_socklen_t *optlen)
Get various socket options.
int zsock_getsockname(int sock, struct net_sockaddr *addr, net_socklen_t *addrlen)
Get socket name.
int zsock_bind(int sock, const struct net_sockaddr *addr, net_socklen_t addrlen)
Bind a socket to a local network address.
int zsock_setsockopt(int sock, int level, int optname, const void *optval, net_socklen_t optlen)
Set various socket options.
int zsock_getpeername(int sock, struct net_sockaddr *addr, net_socklen_t *addrlen)
Get peer name.
void zsock_freeaddrinfo(struct zsock_addrinfo *ai)
Free results returned by zsock_getaddrinfo().
ssize_t zsock_recvfrom(int sock, void *buf, size_t max_len, int flags, struct net_sockaddr *src_addr, net_socklen_t *addrlen)
Receive data from an arbitrary network address.
static ssize_t zsock_recv(int sock, void *buf, size_t max_len, int flags)
Receive data from a connected peer.
Definition socket.h:608
int zsock_send_all(int sock, const void *buf, size_t len, int flags, k_timeout_t timeout, size_t *sent_len)
Send data to an arbitrary network address.
int zsock_gethostname(char *buf, size_t len)
Get local host name.
ssize_t zsock_sendto(int sock, const void *buf, size_t len, int flags, const struct net_sockaddr *dest_addr, net_socklen_t addrlen)
Send data to an arbitrary network address.
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_sendmsg(int sock, const struct net_msghdr *msg, int flags)
Send data to an arbitrary network address.
static char * zsock_inet_ntop(net_sa_family_t family, const void *src, char *dst, size_t size)
Convert network address from internal to numeric ASCII form.
Definition socket.h:779
int zsock_connect(int sock, const struct net_sockaddr *addr, net_socklen_t addrlen)
Connect a socket to a peer network address.
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_inet_pton(net_sa_family_t family, const char *src, void *dst)
Convert network address from numeric ASCII form to internal representation.
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:101
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition ft8xx_reference_api.h:153
uint32_t net_socklen_t
Length of a socket address.
Definition net_ip.h:172
unsigned short int net_sa_family_t
Socket address family type.
Definition net_ip.h:169
net_ip_protocol
Protocol numbers from IANA/BSD.
Definition net_ip.h:64
char * net_addr_ntop(net_sa_family_t family, const void *src, char *dst, size_t size)
Convert IP address to string form.
Public kernel APIs.
__SIZE_TYPE__ ssize_t
Definition types.h:28
IPv6 and IPv4 definitions.
flags
Definition parser.h:86
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
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Kernel timeout type.
Definition clock.h:65
Message struct.
Definition net_ip.h:295
Generic sockaddr struct.
Definition net_ip.h:455
Definition used when querying address information.
Definition socket.h:341
net_socklen_t ai_addrlen
Length of the socket address.
Definition socket.h:348
struct net_sockaddr * ai_addr
Pointer to the address.
Definition socket.h:349
struct zsock_addrinfo * ai_next
Pointer to next address entry.
Definition socket.h:342
int ai_family
Address family of the returned addresses.
Definition socket.h:344
int ai_flags
Additional options.
Definition socket.h:343
char * ai_canonname
Optional official name of the host.
Definition socket.h:350
int ai_protocol
Protocol for addresses, 0 means any protocol.
Definition socket.h:346
int ai_socktype
Socket type, for example NET_SOCK_STREAM or NET_SOCK_DGRAM.
Definition socket.h:345
int ai_eflags
Extended flags for special usage.
Definition socket.h:347
Definition of the monitored socket/file descriptor.
Definition socket_poll.h:31
Data structure for ZSOCK_TLS_CERT_VERIFY_CALLBACK socket option.
Definition socket.h:321
void * cb
A pointer to the certificate verification callback function.
Definition socket.h:327
void * ctx
A pointer to an opaque context passed to the callback.
Definition socket.h:330
Iterable sections helpers.