Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 | /** * @file * @brief BSD Sockets compatible API definitions * * An API for applications to use BSD Sockets like API. */ /* * Copyright (c) 2017-2018 Linaro Limited * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_INCLUDE_NET_SOCKET_H_ #define ZEPHYR_INCLUDE_NET_SOCKET_H_ /** * @brief BSD Sockets compatible API * @defgroup bsd_sockets BSD Sockets compatible API * @ingroup networking * @{ */ #include <sys/types.h> #include <zephyr/types.h> #include <net/net_ip.h> #include <net/dns_resolve.h> #include <net/socket_select.h> #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif struct zsock_pollfd { int fd; short events; short revents; }; /* ZSOCK_POLL* values are compatible with Linux */ /** zsock_poll: Poll for readability */ #define ZSOCK_POLLIN 1 /** zsock_poll: Compatibility value, ignored */ #define ZSOCK_POLLPRI 2 /** zsock_poll: Poll for writability */ #define ZSOCK_POLLOUT 4 /** zsock_poll: Poll results in error condition (output value only) */ #define ZSOCK_POLLERR 8 /** zsock_poll: Poll detected closed connection (output value only) */ #define ZSOCK_POLLHUP 0x10 /** zsock_poll: Invalid socket (output value only) */ #define ZSOCK_POLLNVAL 0x20 /** zsock_recv: Read data without removing it from socket input queue */ #define ZSOCK_MSG_PEEK 0x02 /** zsock_recv/zsock_send: Override operation to non-blocking */ #define ZSOCK_MSG_DONTWAIT 0x40 /* Well-known values, e.g. from Linux man 2 shutdown: * "The constants SHUT_RD, SHUT_WR, SHUT_RDWR have the value 0, 1, 2, * respectively". Some software uses numeric values. */ /** zsock_shutdown: Shut down for reading */ #define ZSOCK_SHUT_RD 0 /** zsock_shutdown: Shut down for writing */ #define ZSOCK_SHUT_WR 1 /** zsock_shutdown: Shut down for both reading and writing */ #define ZSOCK_SHUT_RDWR 2 /** Protocol level for TLS. * Here, the same socket protocol level for TLS as in Linux was used. */ #define SOL_TLS 282 /** * @defgroup secure_sockets_options Socket options for TLS * @{ */ /** Socket option to select TLS credentials to use. It accepts and returns an * array of sec_tag_t that indicate which TLS credentials should be used with * specific socket. */ #define TLS_SEC_TAG_LIST 1 /** Write-only socket option to set hostname. It accepts a string containing * the hostname (may be NULL to disable hostname verification). By default, * hostname check is enforced for TLS clients. */ #define TLS_HOSTNAME 2 /** Socket option to select ciphersuites to use. It accepts and returns an array * of integers with IANA assigned ciphersuite identifiers. * If not set, socket will allow all ciphersuites available in the system * (mebdTLS default behavior). */ #define TLS_CIPHERSUITE_LIST 3 /** Read-only socket option to read a ciphersuite chosen during TLS handshake. * It returns an integer containing an IANA assigned ciphersuite identifier * of chosen ciphersuite. */ #define TLS_CIPHERSUITE_USED 4 /** Write-only socket option to set peer verification level for TLS connection. * This option accepts an integer with a peer verification level, compatible * with mbedTLS values: * - 0 - none * - 1 - optional * - 2 - required * * If not set, socket will use mbedTLS defaults (none for servers, required * for clients). */ #define TLS_PEER_VERIFY 5 /** Write-only socket option to set role for DTLS connection. This option * is irrelevant for TLS connections, as for them role is selected based on * connect()/listen() usage. By default, DTLS will assume client role. * This option accepts an integer with a TLS role, compatible with * mbedTLS values: * - 0 - client * - 1 - server */ #define TLS_DTLS_ROLE 6 /** @} */ struct zsock_addrinfo { struct zsock_addrinfo *ai_next; int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct sockaddr _ai_addr; char _ai_canonname[DNS_MAX_NAME_SIZE + 1]; }; /** * @brief Create a network socket * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/socket.html>`__ * for normative description. * This function is also exposed as ``socket()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_socket(int family, int type, int proto); /** * @brief Close a network socket * * @details * @rst * Close a network socket. * This function is also exposed as ``close()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined (in which case it * may conflict with generic POSIX ``close()`` function). * @endrst */ __syscall int zsock_close(int sock); /** * @brief Shutdown socket send/receive operations * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/shutdown.html>`__ * for normative description, but currently this function has no effect in * Zephyr and provided solely for compatibility with existing code. * This function is also exposed as ``shutdown()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_shutdown(int sock, int how); /** * @brief Bind a socket to a local network address * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.html>`__ * for normative description. * This function is also exposed as ``bind()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_bind(int sock, const struct sockaddr *addr, socklen_t addrlen); /** * @brief Connect a socket to a peer network address * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html>`__ * for normative description. * This function is also exposed as ``connect()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_connect(int sock, const struct sockaddr *addr, socklen_t addrlen); /** * @brief Set up a STREAM socket to accept peer connections * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/listen.html>`__ * for normative description. * This function is also exposed as ``listen()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_listen(int sock, int backlog); /** * @brief Accept a connection on listening socket * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/accept.html>`__ * for normative description. * This function is also exposed as ``accept()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_accept(int sock, struct sockaddr *addr, socklen_t *addrlen); /** * @brief Send data to an arbitrary network address * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/sendto.html>`__ * for normative description. * This function is also exposed as ``sendto()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall ssize_t zsock_sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); /** * @brief Send data to a connected peer * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/send.html>`__ * for normative description. * This function is also exposed as ``send()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ static inline ssize_t zsock_send(int sock, const void *buf, size_t len, int flags) { return zsock_sendto(sock, buf, len, flags, NULL, 0); } /** * @brief Send data to an arbitrary network address * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/sendmsg.html>`__ * for normative description. * This function is also exposed as ``sendmsg()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall ssize_t zsock_sendmsg(int sock, const struct msghdr *msg, int flags); /** * @brief Receive data from an arbitrary network address * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/recvfrom.html>`__ * for normative description. * This function is also exposed as ``recvfrom()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall ssize_t zsock_recvfrom(int sock, void *buf, size_t max_len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); /** * @brief Receive data from a connected peer * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html>`__ * for normative description. * This function is also exposed as ``recv()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ static inline ssize_t zsock_recv(int sock, void *buf, size_t max_len, int flags) { return zsock_recvfrom(sock, buf, max_len, flags, NULL, NULL); } /** * @brief Control blocking/non-blocking mode of a socket * * @details * @rst * This functions allow to (only) configure a socket for blocking or * non-blocking operation (O_NONBLOCK). * This function is also exposed as ``fcntl()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined (in which case * it may conflict with generic POSIX ``fcntl()`` function). * @endrst */ __syscall int zsock_fcntl(int sock, int cmd, int flags); /** * @brief Efficiently poll multiple sockets for events * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/poll.html>`__ * for normative description. (In Zephyr this function works only with * sockets, not arbitrary file descriptors.) * This function is also exposed as ``poll()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined (in which case * it may conflict with generic POSIX ``poll()`` function). * @endrst */ __syscall int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout); /** * @brief Get various socket options * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getsockopt.html>`__ * for normative description. In Zephyr this function supports a subset of * socket options described by POSIX, but also some additional options * available in Linux (some options are dummy and provided to ease porting * of existing code). * This function is also exposed as ``getsockopt()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen); /** * @brief Set various socket options * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/setsockopt.html>`__ * for normative description. In Zephyr this function supports a subset of * socket options described by POSIX, but also some additional options * available in Linux (some options are dummy and provided to ease porting * of existing code). * This function is also exposed as ``setsockopt()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen); /** * @brief Get socket name * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getsockname.html>`__ * for normative description. * This function is also exposed as ``getsockname()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_getsockname(int sock, struct sockaddr *addr, socklen_t *addrlen); /** * @brief Get local host name * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/gethostname.html>`__ * for normative description. * This function is also exposed as ``gethostname()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_gethostname(char *buf, size_t len); /** * @brief Convert network address from internal to numeric ASCII form * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/inet_ntop.html>`__ * for normative description. * This function is also exposed as ``inet_ntop()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ static inline char *zsock_inet_ntop(sa_family_t family, const void *src, char *dst, size_t size) { return net_addr_ntop(family, src, dst, size); } /** * @brief Convert network address from numeric ASCII form to internal representation * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/inet_pton.html>`__ * for normative description. * This function is also exposed as ``inet_pton()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ __syscall int zsock_inet_pton(sa_family_t family, const char *src, void *dst); /** @cond INTERNAL_HIDDEN */ __syscall int z_zsock_getaddrinfo_internal(const char *host, const char *service, const struct zsock_addrinfo *hints, struct zsock_addrinfo *res); /** @endcond */ /* Flags for getaddrinfo() hints. */ /** Address for bind() (vs for connect()) */ #define AI_PASSIVE 0x1 /** Fill in ai_canonname */ #define AI_CANONNAME 0x2 /** Assume host address is in numeric notation, don't DNS lookup */ #define AI_NUMERICHOST 0x4 /** May return IPv4 mapped address for IPv6 */ #define AI_V4MAPPED 0x8 /** May return both native IPv6 and mapped IPv4 address for IPv6 */ #define AI_ALL 0x10 /** IPv4/IPv6 support depends on local system config */ #define AI_ADDRCONFIG 0x20 /** Assume service (port) is numeric */ #define AI_NUMERICSERV 0x400 /** * @brief Resolve a domain name to one or more network addresses * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html>`__ * for normative description. * This function is also exposed as ``getaddrinfo()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ int zsock_getaddrinfo(const char *host, const char *service, const struct zsock_addrinfo *hints, struct zsock_addrinfo **res); /** * @brief Free results returned by zsock_getaddrinfo() * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/freeaddrinfo.html>`__ * for normative description. * This function is also exposed as ``freeaddrinfo()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ static inline void zsock_freeaddrinfo(struct zsock_addrinfo *ai) { free(ai); } /** * @brief Convert zsock_getaddrinfo() error code to textual message * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/gai_strerror.html>`__ * for normative description. * This function is also exposed as ``gai_strerror()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ const char *zsock_gai_strerror(int errcode); /** zsock_getnameinfo(): Resolve to numeric address. */ #define NI_NUMERICHOST 1 /** zsock_getnameinfo(): Resolve to numeric port number. */ #define NI_NUMERICSERV 2 /** zsock_getnameinfo(): Return only hostname instead of FQDN */ #define NI_NOFQDN 4 /** zsock_getnameinfo(): Dummy option for compatibility */ #define NI_NAMEREQD 8 /** zsock_getnameinfo(): Dummy option for compatibility */ #define NI_DGRAM 16 /* POSIX extensions */ /** zsock_getnameinfo(): Max supported hostname length */ #ifndef NI_MAXHOST #define NI_MAXHOST 64 #endif /** * @brief Resolve a network address to a domain name or ASCII address * * @details * @rst * See `POSIX.1-2017 article * <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getnameinfo.html>`__ * for normative description. * This function is also exposed as ``getnameinfo()`` * if :option:`CONFIG_NET_SOCKETS_POSIX_NAMES` is defined. * @endrst */ int zsock_getnameinfo(const struct sockaddr *addr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags); #if defined(CONFIG_NET_SOCKETS_POSIX_NAMES) #define pollfd zsock_pollfd #if !defined(CONFIG_NET_SOCKETS_OFFLOAD) static inline int socket(int family, int type, int proto) { return zsock_socket(family, type, proto); } static inline int close(int sock) { return zsock_close(sock); } static inline int shutdown(int sock, int how) { return zsock_shutdown(sock, how); } static inline int bind(int sock, const struct sockaddr *addr, socklen_t addrlen) { return zsock_bind(sock, addr, addrlen); } static inline int connect(int sock, const struct sockaddr *addr, socklen_t addrlen) { return zsock_connect(sock, addr, addrlen); } static inline int listen(int sock, int backlog) { return zsock_listen(sock, backlog); } static inline int accept(int sock, struct sockaddr *addr, socklen_t *addrlen) { return zsock_accept(sock, addr, addrlen); } static inline ssize_t send(int sock, const void *buf, size_t len, int flags) { return zsock_send(sock, buf, len, flags); } static inline ssize_t recv(int sock, void *buf, size_t max_len, int flags) { return zsock_recv(sock, buf, max_len, flags); } /* This conflicts with fcntl.h, so code must include fcntl.h before socket.h: */ #define fcntl zsock_fcntl static inline ssize_t sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen) { return zsock_sendto(sock, buf, len, flags, dest_addr, addrlen); } static inline ssize_t sendmsg(int sock, const struct msghdr *message, int flags) { return zsock_sendmsg(sock, message, flags); } static inline ssize_t recvfrom(int sock, void *buf, size_t max_len, int flags, struct sockaddr *src_addr, socklen_t *addrlen) { return zsock_recvfrom(sock, buf, max_len, flags, src_addr, addrlen); } static inline int poll(struct zsock_pollfd *fds, int nfds, int timeout) { return zsock_poll(fds, nfds, timeout); } static inline int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen) { return zsock_getsockopt(sock, level, optname, optval, optlen); } static inline int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen) { return zsock_setsockopt(sock, level, optname, optval, optlen); } static inline int getsockname(int sock, struct sockaddr *addr, socklen_t *addrlen) { return zsock_getsockname(sock, addr, addrlen); } static inline int getaddrinfo(const char *host, const char *service, const struct zsock_addrinfo *hints, struct zsock_addrinfo **res) { return zsock_getaddrinfo(host, service, hints, res); } static inline void freeaddrinfo(struct zsock_addrinfo *ai) { zsock_freeaddrinfo(ai); } static inline const char *gai_strerror(int errcode) { return zsock_gai_strerror(errcode); } static inline int getnameinfo(const struct sockaddr *addr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags) { return zsock_getnameinfo(addr, addrlen, host, hostlen, serv, servlen, flags); } #define addrinfo zsock_addrinfo static inline int gethostname(char *buf, size_t len) { return zsock_gethostname(buf, len); } static inline int inet_pton(sa_family_t family, const char *src, void *dst) { return zsock_inet_pton(family, src, dst); } #else struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; }; /* Legacy case: retain containing extern "C" with C++ * * This header requires aliases defined within this file, and can't * easily be moved to the top. */ #include <net/socket_offload.h> static inline int inet_pton(sa_family_t family, const char *src, void *dst) { if ((family != AF_INET) && (family != AF_INET6)) { errno = EAFNOSUPPORT; return -1; } if (net_addr_pton(family, src, dst) == 0) { return 1; } else { return 0; } } #endif /* !defined(CONFIG_NET_SOCKETS_OFFLOAD) */ #define POLLIN ZSOCK_POLLIN #define POLLOUT ZSOCK_POLLOUT #define POLLERR ZSOCK_POLLERR #define POLLHUP ZSOCK_POLLHUP #define POLLNVAL ZSOCK_POLLNVAL #define MSG_PEEK ZSOCK_MSG_PEEK #define MSG_DONTWAIT ZSOCK_MSG_DONTWAIT #define SHUT_RD ZSOCK_SHUT_RD #define SHUT_WR ZSOCK_SHUT_WR #define SHUT_RDWR ZSOCK_SHUT_RDWR static inline char *inet_ntop(sa_family_t family, const void *src, char *dst, size_t size) { return zsock_inet_ntop(family, src, dst, size); } #define EAI_BADFLAGS DNS_EAI_BADFLAGS #define EAI_NONAME DNS_EAI_NONAME #define EAI_AGAIN DNS_EAI_AGAIN #define EAI_FAIL DNS_EAI_FAIL #define EAI_NODATA DNS_EAI_NODATA #define EAI_MEMORY DNS_EAI_MEMORY #define EAI_SYSTEM DNS_EAI_SYSTEM #define EAI_SERVICE DNS_EAI_SERVICE #endif /* defined(CONFIG_NET_SOCKETS_POSIX_NAMES) */ /** sockopt: Socket-level option */ #define SOL_SOCKET 1 /* Socket options for SOL_SOCKET level */ /** sockopt: Enable server address reuse (ignored, for compatibility) */ #define SO_REUSEADDR 2 /** sockopt: Async error (ignored, for compatibility) */ #define SO_ERROR 4 /** sockopt: Timestamp TX packets */ #define SO_TIMESTAMPING 37 /* Socket options for IPPROTO_TCP level */ /** sockopt: Disable TCP buffering (ignored, for compatibility) */ #define TCP_NODELAY 1 /* Socket options for IPPROTO_IPV6 level */ /** sockopt: Don't support IPv4 access (ignored, for compatibility) */ #define IPV6_V6ONLY 26 /** sockopt: Socket priority */ #define SO_PRIORITY 12 /** sockopt: Socket TX time (when the data should be sent) */ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME /* Socket options for SOCKS5 proxy */ /** sockopt: Enable SOCKS5 for Socket */ #define SO_SOCKS5 60 /** @cond INTERNAL_HIDDEN */ /** * @brief Registration information for a given BSD socket family. */ struct net_socket_register { int family; bool (*is_supported)(int family, int type, int proto); int (*handler)(int family, int type, int proto); }; #define NET_SOCKET_GET_NAME(socket_name) \ (__net_socket_register_##socket_name) #define NET_SOCKET_REGISTER(socket_name, _family, _is_supported, _handler) \ static const Z_STRUCT_SECTION_ITERABLE(net_socket_register, \ NET_SOCKET_GET_NAME(socket_name)) = { \ .family = _family, \ .is_supported = _is_supported, \ .handler = _handler, \ } /** @endcond */ #ifdef __cplusplus } #endif #include <syscalls/socket.h> /** * @} */ #endif /* ZEPHYR_INCLUDE_NET_SOCKET_H_ */ |