11bd4fe43Sopenharmony_ci/**
21bd4fe43Sopenharmony_ci * @file hi_net_api.h
31bd4fe43Sopenharmony_ci *
41bd4fe43Sopenharmony_ci * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
51bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
61bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License.
71bd4fe43Sopenharmony_ci * You may obtain a copy of the License at
81bd4fe43Sopenharmony_ci *
91bd4fe43Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
101bd4fe43Sopenharmony_ci *
111bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
121bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
131bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
141bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and
151bd4fe43Sopenharmony_ci * limitations under the License.
161bd4fe43Sopenharmony_ci */
171bd4fe43Sopenharmony_ci
181bd4fe43Sopenharmony_ci/**
191bd4fe43Sopenharmony_ci * @defgroup hi_net Lwip API
201bd4fe43Sopenharmony_ci */
211bd4fe43Sopenharmony_ci/**
221bd4fe43Sopenharmony_ci * @defgroup hi_net_basic Lwip Basic Interface
231bd4fe43Sopenharmony_ci * @ingroup hi_net
241bd4fe43Sopenharmony_ci */
251bd4fe43Sopenharmony_ci
261bd4fe43Sopenharmony_ci#ifndef __HI_NET_API_H__
271bd4fe43Sopenharmony_ci#define __HI_NET_API_H__
281bd4fe43Sopenharmony_ci
291bd4fe43Sopenharmony_ci#include <stdint.h>
301bd4fe43Sopenharmony_ci#include <stddef.h>
311bd4fe43Sopenharmony_ci#include <errno.h>
321bd4fe43Sopenharmony_ci
331bd4fe43Sopenharmony_ci#ifdef __cplusplus
341bd4fe43Sopenharmony_ciextern "C"
351bd4fe43Sopenharmony_ci{
361bd4fe43Sopenharmony_ci#endif
371bd4fe43Sopenharmony_ci
381bd4fe43Sopenharmony_citypedef unsigned char  u8_t;
391bd4fe43Sopenharmony_citypedef unsigned short u16_t;
401bd4fe43Sopenharmony_citypedef unsigned int u32_t;
411bd4fe43Sopenharmony_citypedef int err_t;
421bd4fe43Sopenharmony_ci
431bd4fe43Sopenharmony_ci#ifndef LWIP_TIMEVAL_PRIVATE
441bd4fe43Sopenharmony_ci#define LWIP_TIMEVAL_PRIVATE 0
451bd4fe43Sopenharmony_ci#endif
461bd4fe43Sopenharmony_ci
471bd4fe43Sopenharmony_ci/**
481bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
491bd4fe43Sopenharmony_ci *
501bd4fe43Sopenharmony_ci * max length of INET ADDRESS.CNcomment:INET最大的字符串长度。CNend
511bd4fe43Sopenharmony_ci */
521bd4fe43Sopenharmony_ci#define INET_ADDRSTRLEN 16
531bd4fe43Sopenharmony_ci
541bd4fe43Sopenharmony_ci/**
551bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
561bd4fe43Sopenharmony_ci *
571bd4fe43Sopenharmony_ci * max num of FD.CNcomment:最大的描述符个数。CNend
581bd4fe43Sopenharmony_ci */
591bd4fe43Sopenharmony_ci#define FD_SETSIZE_MAX 1024
601bd4fe43Sopenharmony_ci
611bd4fe43Sopenharmony_ci#define  EPERM         1  /* Operation not permitted */
621bd4fe43Sopenharmony_ci#define  ENOENT        2  /* No such file or directory */
631bd4fe43Sopenharmony_ci#define  ESRCH         3  /* No such process */
641bd4fe43Sopenharmony_ci#define  EINTR         4  /* Interrupted system call */
651bd4fe43Sopenharmony_ci#define  EIO           5  /* I/O error */
661bd4fe43Sopenharmony_ci#define  ENXIO         6  /* No such device or address */
671bd4fe43Sopenharmony_ci#define  E2BIG         7  /* Arg list too long */
681bd4fe43Sopenharmony_ci#define  ENOEXEC       8  /* Exec format error */
691bd4fe43Sopenharmony_ci#define  EBADF         9  /* Bad file number */
701bd4fe43Sopenharmony_ci#define  ECHILD       10  /* No child processes */
711bd4fe43Sopenharmony_ci#define  EAGAIN       11  /* Try again */
721bd4fe43Sopenharmony_ci#define  ENOMEM       12  /* Out of memory */
731bd4fe43Sopenharmony_ci#define  EACCES       13  /* Permission denied */
741bd4fe43Sopenharmony_ci#define  EFAULT       14  /* Bad address */
751bd4fe43Sopenharmony_ci#define  ENOTBLK      15  /* Block device required */
761bd4fe43Sopenharmony_ci#define  EBUSY        16  /* Device or resource busy */
771bd4fe43Sopenharmony_ci#define  EEXIST       17  /* File exists */
781bd4fe43Sopenharmony_ci#define  EXDEV        18  /* Cross-device link */
791bd4fe43Sopenharmony_ci#define  ENODEV       19  /* No such device */
801bd4fe43Sopenharmony_ci#define  ENOTDIR      20  /* Not a directory */
811bd4fe43Sopenharmony_ci#define  EISDIR       21  /* Is a directory */
821bd4fe43Sopenharmony_ci#define  ENFILE       23  /* File table overflow */
831bd4fe43Sopenharmony_ci#define  EMFILE       24  /* Too many open files */
841bd4fe43Sopenharmony_ci#define  ENOTTY       25  /* Not a typewriter */
851bd4fe43Sopenharmony_ci#define  ETXTBSY      26  /* Text file busy */
861bd4fe43Sopenharmony_ci#define  EFBIG        27  /* File too large */
871bd4fe43Sopenharmony_ci#define  ENOSPC       28  /* No space left on device */
881bd4fe43Sopenharmony_ci#define  ESPIPE       29  /* Illegal seek */
891bd4fe43Sopenharmony_ci#define  EROFS        30  /* Read-only file system */
901bd4fe43Sopenharmony_ci#define  EMLINK       31  /* Too many links */
911bd4fe43Sopenharmony_ci#define  EPIPE        32  /* Broken pipe */
921bd4fe43Sopenharmony_ci#define  EDOM         33  /* Math argument out of domain of func */
931bd4fe43Sopenharmony_ci#define  EDEADLK      35  /* Resource deadlock would occur */
941bd4fe43Sopenharmony_ci#define  ENAMETOOLONG 36  /* File name too long */
951bd4fe43Sopenharmony_ci#define  ENOLCK       37  /* No record locks available */
961bd4fe43Sopenharmony_ci#define  ENOSYS       38  /* Function not implemented */
971bd4fe43Sopenharmony_ci#define  ENOTEMPTY    39  /* Directory not empty */
981bd4fe43Sopenharmony_ci#define  ELOOP        40  /* Too many symbolic links encountered */
991bd4fe43Sopenharmony_ci#define  EWOULDBLOCK  EAGAIN  /* Operation would block */
1001bd4fe43Sopenharmony_ci#define  ENOMSG       42  /* No message of desired type */
1011bd4fe43Sopenharmony_ci#define  EIDRM        43  /* Identifier removed */
1021bd4fe43Sopenharmony_ci#define  ECHRNG       44  /* Channel number out of range */
1031bd4fe43Sopenharmony_ci#define  EL2NSYNC     45  /* Level 2 not synchronized */
1041bd4fe43Sopenharmony_ci#define  EL3HLT       46  /* Level 3 halted */
1051bd4fe43Sopenharmony_ci#define  EL3RST       47  /* Level 3 reset */
1061bd4fe43Sopenharmony_ci#define  ELNRNG       48  /* Link number out of range */
1071bd4fe43Sopenharmony_ci#define  EUNATCH      49  /* Protocol driver not attached */
1081bd4fe43Sopenharmony_ci#define  ENOCSI       50  /* No CSI structure available */
1091bd4fe43Sopenharmony_ci#define  EL2HLT       51  /* Level 2 halted */
1101bd4fe43Sopenharmony_ci#define  EBADE        52  /* Invalid exchange */
1111bd4fe43Sopenharmony_ci#define  EBADR        53  /* Invalid request descriptor */
1121bd4fe43Sopenharmony_ci#define  EXFULL       54  /* Exchange full */
1131bd4fe43Sopenharmony_ci#define  ENOANO       55  /* No anode */
1141bd4fe43Sopenharmony_ci#define  EBADRQC      56  /* Invalid request code */
1151bd4fe43Sopenharmony_ci#define  EBADSLT      57  /* Invalid slot */
1161bd4fe43Sopenharmony_ci#define  EDEADLOCK    EDEADLK
1171bd4fe43Sopenharmony_ci#define  EBFONT       59  /* Bad font file format */
1181bd4fe43Sopenharmony_ci#define  ENOSTR       60  /* Device not a stream */
1191bd4fe43Sopenharmony_ci#define  ENODATA      61  /* No data available */
1201bd4fe43Sopenharmony_ci#define  ETIME        62  /* Timer expired */
1211bd4fe43Sopenharmony_ci#define  ENOSR        63  /* Out of streams resources */
1221bd4fe43Sopenharmony_ci#define  ENONET       64  /* Machine is not on the network */
1231bd4fe43Sopenharmony_ci#define  ENOPKG       65  /* Package not installed */
1241bd4fe43Sopenharmony_ci#define  EREMOTE      66  /* Object is remote */
1251bd4fe43Sopenharmony_ci#define  ENOLINK      67  /* Link has been severed */
1261bd4fe43Sopenharmony_ci#define  EADV         68  /* Advertise error */
1271bd4fe43Sopenharmony_ci#define  ESRMNT       69  /* Srmount error */
1281bd4fe43Sopenharmony_ci#define  ECOMM        70  /* Communication error on send */
1291bd4fe43Sopenharmony_ci#define  EPROTO       71  /* Protocol error */
1301bd4fe43Sopenharmony_ci#define  EMULTIHOP    72  /* Multihop attempted */
1311bd4fe43Sopenharmony_ci#define  EDOTDOT      73  /* RFS specific error */
1321bd4fe43Sopenharmony_ci#define  EBADMSG      74  /* Not a data message */
1331bd4fe43Sopenharmony_ci#define  EOVERFLOW    75  /* Value too large for defined data type */
1341bd4fe43Sopenharmony_ci#define  ENOTUNIQ     76  /* Name not unique on network */
1351bd4fe43Sopenharmony_ci#define  EBADFD       77  /* File descriptor in bad state */
1361bd4fe43Sopenharmony_ci#define  EREMCHG      78  /* Remote address changed */
1371bd4fe43Sopenharmony_ci#define  ELIBACC      79  /* Can not access a needed shared library */
1381bd4fe43Sopenharmony_ci#define  ELIBBAD      80  /* Accessing a corrupted shared library */
1391bd4fe43Sopenharmony_ci#define  ELIBSCN      81  /* .lib section in a.out corrupted */
1401bd4fe43Sopenharmony_ci#define  ELIBMAX      82  /* Attempting to link in too many shared libraries */
1411bd4fe43Sopenharmony_ci#define  ELIBEXEC     83  /* Cannot exec a shared library directly */
1421bd4fe43Sopenharmony_ci#define  EILSEQ       84  /* Illegal byte sequence */
1431bd4fe43Sopenharmony_ci#define  ERESTART     85  /* Interrupted system call should be restarted */
1441bd4fe43Sopenharmony_ci#define  ESTRPIPE     86  /* Streams pipe error */
1451bd4fe43Sopenharmony_ci#define  EUSERS       87  /* Too many users */
1461bd4fe43Sopenharmony_ci#define  ENOTSOCK     88  /* Socket operation on non-socket */
1471bd4fe43Sopenharmony_ci#define  EDESTADDRREQ 89  /* Destination address required */
1481bd4fe43Sopenharmony_ci#define  EMSGSIZE     90  /* Message too long */
1491bd4fe43Sopenharmony_ci#define  EPROTOTYPE   91  /* Protocol wrong type for socket */
1501bd4fe43Sopenharmony_ci#define  ENOPROTOOPT  92  /* Protocol not available */
1511bd4fe43Sopenharmony_ci#define  EPROTONOSUPPORT 93  /* Protocol not supported */
1521bd4fe43Sopenharmony_ci#define  ESOCKTNOSUPPORT 94  /* Socket type not supported */
1531bd4fe43Sopenharmony_ci#define  EOPNOTSUPP      95  /* Operation not supported on transport endpoint */
1541bd4fe43Sopenharmony_ci#define  EPFNOSUPPORT    96  /* Protocol family not supported */
1551bd4fe43Sopenharmony_ci#define  EAFNOSUPPORT    97  /* Address family not supported by protocol */
1561bd4fe43Sopenharmony_ci#define  EADDRINUSE      98  /* Address already in use */
1571bd4fe43Sopenharmony_ci#define  EADDRNOTAVAIL   99  /* Cannot assign requested address */
1581bd4fe43Sopenharmony_ci#define  ENETDOWN       100  /* Network is down */
1591bd4fe43Sopenharmony_ci#define  ENETUNREACH    101  /* Network is unreachable */
1601bd4fe43Sopenharmony_ci#define  ENETRESET      102  /* Network dropped connection because of reset */
1611bd4fe43Sopenharmony_ci#define  ECONNABORTED   103  /* Software caused connection abort */
1621bd4fe43Sopenharmony_ci#define  ECONNRESET     104  /* Connection reset by peer */
1631bd4fe43Sopenharmony_ci#define  ENOBUFS        105  /* No buffer space available */
1641bd4fe43Sopenharmony_ci#define  EISCONN        106  /* Transport endpoint is already connected */
1651bd4fe43Sopenharmony_ci#define  ENOTCONN       107  /* Transport endpoint is not connected */
1661bd4fe43Sopenharmony_ci#define  ESHUTDOWN      108  /* Cannot send after transport endpoint shutdown */
1671bd4fe43Sopenharmony_ci#define  ETOOMANYREFS   109  /* Too many references: cannot splice */
1681bd4fe43Sopenharmony_ci#define  ETIMEDOUT      110  /* Connection timed out */
1691bd4fe43Sopenharmony_ci#define  ECONNREFUSED   111  /* Connection refused */
1701bd4fe43Sopenharmony_ci#define  EHOSTDOWN      112  /* Host is down */
1711bd4fe43Sopenharmony_ci#define  EHOSTUNREACH   113  /* No route to host */
1721bd4fe43Sopenharmony_ci#define  EALREADY       114  /* Operation already in progress */
1731bd4fe43Sopenharmony_ci#define  EINPROGRESS    115  /* Operation now in progress */
1741bd4fe43Sopenharmony_ci#define  ESTALE         116  /* Stale NFS file handle */
1751bd4fe43Sopenharmony_ci#define  EUCLEAN        117  /* Structure needs cleaning */
1761bd4fe43Sopenharmony_ci#define  ENOTNAM        118  /* Not a XENIX named type file */
1771bd4fe43Sopenharmony_ci#define  ENAVAIL        119  /* No XENIX semaphores available */
1781bd4fe43Sopenharmony_ci#define  EISNAM         120  /* Is a named type file */
1791bd4fe43Sopenharmony_ci#define  EREMOTEIO      121  /* Remote I/O error */
1801bd4fe43Sopenharmony_ci#define  EDQUOT         122  /* Quota exceeded */
1811bd4fe43Sopenharmony_ci#define  ENOMEDIUM      123  /* No medium found */
1821bd4fe43Sopenharmony_ci#define  EMEDIUMTYPE    124  /* Wrong medium type */
1831bd4fe43Sopenharmony_ci
1841bd4fe43Sopenharmony_ci#define SOCK_STREAM     1
1851bd4fe43Sopenharmony_ci#define SOCK_DGRAM      2
1861bd4fe43Sopenharmony_ci#define SOCK_RAW        3
1871bd4fe43Sopenharmony_ci
1881bd4fe43Sopenharmony_ci#define AF_UNSPEC       0
1891bd4fe43Sopenharmony_ci#define AF_INET         2
1901bd4fe43Sopenharmony_ci#define AF_INET6        AF_UNSPEC
1911bd4fe43Sopenharmony_ci#define PF_INET         AF_INET
1921bd4fe43Sopenharmony_ci#define PF_INET6        AF_INET6
1931bd4fe43Sopenharmony_ci#define PF_UNSPEC       AF_UNSPEC
1941bd4fe43Sopenharmony_ci
1951bd4fe43Sopenharmony_ci#define IPPROTO_IP      0
1961bd4fe43Sopenharmony_ci#define IPPROTO_TCP     6
1971bd4fe43Sopenharmony_ci#define IPPROTO_UDP     17
1981bd4fe43Sopenharmony_ci#define IPPROTO_UDPLITE 136
1991bd4fe43Sopenharmony_ci
2001bd4fe43Sopenharmony_ci#define MSG_PEEK       0x02
2011bd4fe43Sopenharmony_ci#define MSG_WAITALL    0x100
2021bd4fe43Sopenharmony_ci#define MSG_OOB        0x01
2031bd4fe43Sopenharmony_ci#define MSG_DONTWAIT   0x40
2041bd4fe43Sopenharmony_ci#define MSG_MORE       0x8000
2051bd4fe43Sopenharmony_ci
2061bd4fe43Sopenharmony_ci#define SOL_SOCKET   1
2071bd4fe43Sopenharmony_ci#define SO_REUSEADDR 2
2081bd4fe43Sopenharmony_ci#define SO_TYPE      3
2091bd4fe43Sopenharmony_ci#define SO_ERROR     4
2101bd4fe43Sopenharmony_ci#define SO_BROADCAST 6
2111bd4fe43Sopenharmony_ci#define SO_SNDBUF    7
2121bd4fe43Sopenharmony_ci#define SO_RCVBUF    8
2131bd4fe43Sopenharmony_ci#define SO_KEEPALIVE 9
2141bd4fe43Sopenharmony_ci#define SO_NO_CHECK  11
2151bd4fe43Sopenharmony_ci#define SO_SNDLOWAT  19
2161bd4fe43Sopenharmony_ci#define SO_RCVLOWAT  18
2171bd4fe43Sopenharmony_ci#define SO_SNDTIMEO  67
2181bd4fe43Sopenharmony_ci#define SO_RCVTIMEO  66
2191bd4fe43Sopenharmony_ci#define SO_CONTIMEO  0x1009
2201bd4fe43Sopenharmony_ci
2211bd4fe43Sopenharmony_ci
2221bd4fe43Sopenharmony_ci#ifndef O_NONBLOCK
2231bd4fe43Sopenharmony_ci#define O_NONBLOCK  00004000
2241bd4fe43Sopenharmony_ci#endif
2251bd4fe43Sopenharmony_ci
2261bd4fe43Sopenharmony_ci#ifndef O_NDELAY
2271bd4fe43Sopenharmony_ci#define O_NDELAY    O_NONBLOCK
2281bd4fe43Sopenharmony_ci#endif
2291bd4fe43Sopenharmony_ci
2301bd4fe43Sopenharmony_ci#ifndef F_GETFL
2311bd4fe43Sopenharmony_ci#define F_GETFL 3
2321bd4fe43Sopenharmony_ci#endif
2331bd4fe43Sopenharmony_ci#ifndef F_SETFL
2341bd4fe43Sopenharmony_ci#define F_SETFL 4
2351bd4fe43Sopenharmony_ci#endif
2361bd4fe43Sopenharmony_ci
2371bd4fe43Sopenharmony_ci#define IP_MULTICAST_TTL   5
2381bd4fe43Sopenharmony_ci#define IP_MULTICAST_IF    6
2391bd4fe43Sopenharmony_ci#define IP_MULTICAST_LOOP  7
2401bd4fe43Sopenharmony_ci#define IP_ADD_MEMBERSHIP  35
2411bd4fe43Sopenharmony_ci#define IP_DROP_MEMBERSHIP 36
2421bd4fe43Sopenharmony_ci
2431bd4fe43Sopenharmony_ci#define IPADDR_NONE    ((u32_t)0xffffffffUL)
2441bd4fe43Sopenharmony_ci#define IPADDR_ANY     ((u32_t)0x00000000UL)
2451bd4fe43Sopenharmony_ci#define INADDR_ANY     IPADDR_ANY
2461bd4fe43Sopenharmony_ci
2471bd4fe43Sopenharmony_ci#define ip4_addr1(ipaddr) (((u8_t*)(ipaddr))[0])
2481bd4fe43Sopenharmony_ci#define ip4_addr2(ipaddr) (((u8_t*)(ipaddr))[1])
2491bd4fe43Sopenharmony_ci#define ip4_addr3(ipaddr) (((u8_t*)(ipaddr))[2])
2501bd4fe43Sopenharmony_ci#define ip4_addr4(ipaddr) (((u8_t*)(ipaddr))[3])
2511bd4fe43Sopenharmony_ci
2521bd4fe43Sopenharmony_ci#define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr))
2531bd4fe43Sopenharmony_ci#define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr))
2541bd4fe43Sopenharmony_ci#define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr))
2551bd4fe43Sopenharmony_ci#define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr))
2561bd4fe43Sopenharmony_ci
2571bd4fe43Sopenharmony_ci/**
2581bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
2591bd4fe43Sopenharmony_ci *
2601bd4fe43Sopenharmony_ci * host Host byte order converted to network byte order.CNcomment:主机序转为网络序。CNend
2611bd4fe43Sopenharmony_ci */
2621bd4fe43Sopenharmony_ci#define LWIP_PLATFORM_HTONS(_n)  ((u16_t)((((_n) & 0xff) << 8) | (((_n) >> 8) & 0xff)))
2631bd4fe43Sopenharmony_ci
2641bd4fe43Sopenharmony_ci/**
2651bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
2661bd4fe43Sopenharmony_ci *
2671bd4fe43Sopenharmony_ci * network bytehost order converted to Host byte order.CNcomment:网络序转为主机序。CNend
2681bd4fe43Sopenharmony_ci */
2691bd4fe43Sopenharmony_ci#define LWIP_PLATFORM_HTONL(_n)  ((u32_t)((((_n) & 0xff) << 24) | (((_n) & 0xff00) << 8) | \
2701bd4fe43Sopenharmony_ci                                  (((_n) >> 8)  & 0xff00) | (((_n) >> 24) & 0xff)))
2711bd4fe43Sopenharmony_ci
2721bd4fe43Sopenharmony_ci/**
2731bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
2741bd4fe43Sopenharmony_ci *
2751bd4fe43Sopenharmony_ci * set ip addr for four address.CNcomment:根据ip四段地址设置相应的值。CNend
2761bd4fe43Sopenharmony_ci */
2771bd4fe43Sopenharmony_ci#define IP4_ADDR(ipaddr, a, b, c, d) \
2781bd4fe43Sopenharmony_ci        (ipaddr)->addr = ((u32_t)((d) & 0xff) << 24) | \
2791bd4fe43Sopenharmony_ci                         ((u32_t)((c) & 0xff) << 16) | \
2801bd4fe43Sopenharmony_ci                         ((u32_t)((b) & 0xff) << 8)  | \
2811bd4fe43Sopenharmony_ci                          (u32_t)((a) & 0xff)
2821bd4fe43Sopenharmony_ci
2831bd4fe43Sopenharmony_ci/*****************************************************************************
2841bd4fe43Sopenharmony_ci* 8、LWIP协议栈bsd socket htons/ntohs/ntohl转换
2851bd4fe43Sopenharmony_ci*****************************************************************************/
2861bd4fe43Sopenharmony_ci#define htons(x) lwip_htons(x)
2871bd4fe43Sopenharmony_ci#define ntohs(x) lwip_ntohs(x)
2881bd4fe43Sopenharmony_ci#define htonl(x) lwip_htonl(x)
2891bd4fe43Sopenharmony_ci#define ntohl(x) lwip_ntohl(x)
2901bd4fe43Sopenharmony_ci
2911bd4fe43Sopenharmony_ci#define lwip_htons(x) LWIP_PLATFORM_HTONS(x)
2921bd4fe43Sopenharmony_ci#define lwip_ntohs(x) LWIP_PLATFORM_HTONS(x)
2931bd4fe43Sopenharmony_ci#define lwip_htonl(x) LWIP_PLATFORM_HTONL(x)
2941bd4fe43Sopenharmony_ci#define lwip_ntohl(x) LWIP_PLATFORM_HTONL(x)
2951bd4fe43Sopenharmony_ci
2961bd4fe43Sopenharmony_ci/**
2971bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
2981bd4fe43Sopenharmony_ci* @brief  Point to decimal.CNcomment:ip地址点分制转为十进制CNend
2991bd4fe43Sopenharmony_ci*
3001bd4fe43Sopenharmony_ci* @par Description:
3011bd4fe43Sopenharmony_ci*           Point to decimal.CNcomment:ip地址点分制转为十进制CNend
3021bd4fe43Sopenharmony_ci*
3031bd4fe43Sopenharmony_ci* @attention  cp cannot be empty. CNcomment:传入字符串不能为空CNend
3041bd4fe43Sopenharmony_ci* @param  the ip addr in string CNcomment:字符串ip地址CNend
3051bd4fe43Sopenharmony_ci* @retval #IPADDR        Execute successfully.
3061bd4fe43Sopenharmony_ci* @retval #IPADDR_NONE   Execute failed.
3071bd4fe43Sopenharmony_ci* @par NA:
3081bd4fe43Sopenharmony_ci*         NA
3091bd4fe43Sopenharmony_ci* @see  NULL
3101bd4fe43Sopenharmony_ci
3111bd4fe43Sopenharmony_ci*/
3121bd4fe43Sopenharmony_ciu32_t ipaddr_addr(const char *cp);
3131bd4fe43Sopenharmony_ci#define inet_addr(cp)  ipaddr_addr(cp)
3141bd4fe43Sopenharmony_ci
3151bd4fe43Sopenharmony_ci#if !defined(in_addr_t) && !defined(IN_ADDR_T_DEFINED)
3161bd4fe43Sopenharmony_ci#ifndef _IN_ADDR_T_DECLARED
3171bd4fe43Sopenharmony_citypedef u32_t in_addr_t;
3181bd4fe43Sopenharmony_ci#define _IN_ADDR_T_DECLARED
3191bd4fe43Sopenharmony_ci#endif
3201bd4fe43Sopenharmony_ci#endif
3211bd4fe43Sopenharmony_ci
3221bd4fe43Sopenharmony_ci#if !defined(sa_family_t) && !defined(SA_FAMILY_T_DEFINED)
3231bd4fe43Sopenharmony_citypedef u16_t sa_family_t;
3241bd4fe43Sopenharmony_ci#endif
3251bd4fe43Sopenharmony_ci
3261bd4fe43Sopenharmony_ci#if !defined(in_port_t) && !defined(IN_PORT_T_DEFINED)
3271bd4fe43Sopenharmony_citypedef u16_t in_port_t;
3281bd4fe43Sopenharmony_ci#endif
3291bd4fe43Sopenharmony_ci
3301bd4fe43Sopenharmony_ci#if !defined(socklen_t) && !defined(SOCKLEN_T_DEFINED)
3311bd4fe43Sopenharmony_citypedef u32_t socklen_t;
3321bd4fe43Sopenharmony_ci#endif
3331bd4fe43Sopenharmony_ci
3341bd4fe43Sopenharmony_ci/**
3351bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
3361bd4fe43Sopenharmony_ci *
3371bd4fe43Sopenharmony_ci * ip address in decimal.CNcomment:十进制ip地址CNend
3381bd4fe43Sopenharmony_ci *
3391bd4fe43Sopenharmony_ci */
3401bd4fe43Sopenharmony_cistruct ip_addr {
3411bd4fe43Sopenharmony_ci    u32_t addr;
3421bd4fe43Sopenharmony_ci};
3431bd4fe43Sopenharmony_ci
3441bd4fe43Sopenharmony_ci/**
3451bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
3461bd4fe43Sopenharmony_ci *
3471bd4fe43Sopenharmony_ci * Package structure ip_addr_t to in_addr.CNcomment:封装结构体in_addr_t到in_addrCNend
3481bd4fe43Sopenharmony_ci *
3491bd4fe43Sopenharmony_ci */
3501bd4fe43Sopenharmony_cistruct in_addr {
3511bd4fe43Sopenharmony_ci    in_addr_t s_addr;
3521bd4fe43Sopenharmony_ci};
3531bd4fe43Sopenharmony_ci
3541bd4fe43Sopenharmony_ci/**
3551bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
3561bd4fe43Sopenharmony_ci *
3571bd4fe43Sopenharmony_ci * Address form of socket in Internet Environment.CNcomment:internet环境下套接字的地址形式CNend
3581bd4fe43Sopenharmony_ci *
3591bd4fe43Sopenharmony_ci */
3601bd4fe43Sopenharmony_cistruct sockaddr_in {
3611bd4fe43Sopenharmony_ci    sa_family_t     sin_family;
3621bd4fe43Sopenharmony_ci    in_port_t       sin_port;
3631bd4fe43Sopenharmony_ci    struct in_addr  sin_addr;
3641bd4fe43Sopenharmony_ci#define SIN_ZERO_LEN 8
3651bd4fe43Sopenharmony_ci    char            sin_zero[SIN_ZERO_LEN];
3661bd4fe43Sopenharmony_ci};
3671bd4fe43Sopenharmony_ci
3681bd4fe43Sopenharmony_ci/**
3691bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
3701bd4fe43Sopenharmony_ci *
3711bd4fe43Sopenharmony_ci * General socket address.CNcomment:通用的套接字地址CNend
3721bd4fe43Sopenharmony_ci *
3731bd4fe43Sopenharmony_ci */
3741bd4fe43Sopenharmony_cistruct sockaddr {
3751bd4fe43Sopenharmony_ci    sa_family_t sa_family;
3761bd4fe43Sopenharmony_ci#define SA_DATA_LEN 14
3771bd4fe43Sopenharmony_ci    char sa_data[SA_DATA_LEN];
3781bd4fe43Sopenharmony_ci};
3791bd4fe43Sopenharmony_ci
3801bd4fe43Sopenharmony_ci/**
3811bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
3821bd4fe43Sopenharmony_ci *
3831bd4fe43Sopenharmony_ci * Multicast address and interface.CNcomment:多播地址和接口CNend
3841bd4fe43Sopenharmony_ci *
3851bd4fe43Sopenharmony_ci */
3861bd4fe43Sopenharmony_citypedef struct ip_mreq {
3871bd4fe43Sopenharmony_ci    struct in_addr imr_multiaddr;
3881bd4fe43Sopenharmony_ci    struct in_addr imr_interface;
3891bd4fe43Sopenharmony_ci} ip_mreq;
3901bd4fe43Sopenharmony_ci
3911bd4fe43Sopenharmony_ci/**
3921bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
3931bd4fe43Sopenharmony_ci *
3941bd4fe43Sopenharmony_ci * IPv4 address.CNcomment:ipv4的地址CNend
3951bd4fe43Sopenharmony_ci *
3961bd4fe43Sopenharmony_ci */
3971bd4fe43Sopenharmony_cistruct ip4_addr {
3981bd4fe43Sopenharmony_ci    u32_t addr;
3991bd4fe43Sopenharmony_ci};
4001bd4fe43Sopenharmony_citypedef struct ip4_addr ip4_addr_t;
4011bd4fe43Sopenharmony_citypedef ip4_addr_t ip_addr_t;
4021bd4fe43Sopenharmony_ci
4031bd4fe43Sopenharmony_ci/**
4041bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
4051bd4fe43Sopenharmony_ci* @brief  Network byte order IP address converted to dotted decimal format.
4061bd4fe43Sopenharmony_ci*         CNcomment:网络字节序的IP地址转化为点分十进制格式CNend
4071bd4fe43Sopenharmony_ci*
4081bd4fe43Sopenharmony_ci* @par Description:
4091bd4fe43Sopenharmony_ci*           Address translation.CNcomment:地址转换CNend
4101bd4fe43Sopenharmony_ci*
4111bd4fe43Sopenharmony_ci* @attention  NULL
4121bd4fe43Sopenharmony_ci* @param  cp    [IN]     Type #ip4_addr_t *, Network byte order IP address.CNcomment:点分十进制格式的IP地址CNend
4131bd4fe43Sopenharmony_ci* @param  addr  [IN]     Type #const char *, length of device name.CNcomment:点分十进制ip地址CNend
4141bd4fe43Sopenharmony_ci*
4151bd4fe43Sopenharmony_ci* @retval #1    Excute successfully
4161bd4fe43Sopenharmony_ci* @retval #0    Excute failure
4171bd4fe43Sopenharmony_ci* @par  NULL
4181bd4fe43Sopenharmony_ci*
4191bd4fe43Sopenharmony_ci* @see  NULL
4201bd4fe43Sopenharmony_ci
4211bd4fe43Sopenharmony_ci*/
4221bd4fe43Sopenharmony_ciint ip4addr_aton(const char *cp, ip4_addr_t *addr);
4231bd4fe43Sopenharmony_ci#define inet_aton(cp, addr)  ip4addr_aton(cp, (ip4_addr_t*)addr)
4241bd4fe43Sopenharmony_ci
4251bd4fe43Sopenharmony_ci/**
4261bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
4271bd4fe43Sopenharmony_ci* @brief  Dotted decimal format IP address converted to Network byte order.
4281bd4fe43Sopenharmony_ci*         CNcomment:点分十进制的IP地址转化为网络字节序格式CNend
4291bd4fe43Sopenharmony_ci*
4301bd4fe43Sopenharmony_ci* @par Description:
4311bd4fe43Sopenharmony_ci*           Address translation.CNcomment:地址转换CNend
4321bd4fe43Sopenharmony_ci*
4331bd4fe43Sopenharmony_ci* @attention  NULL
4341bd4fe43Sopenharmony_ci* @param  addr [IN]  Type #ip4_addr_t *, addr ip address in network order to convert.CNcomment:网络字节序ip地址CNend
4351bd4fe43Sopenharmony_ci*
4361bd4fe43Sopenharmony_ci* @retval #Not NULL  Excute successfully
4371bd4fe43Sopenharmony_ci* @retval #NULL      Excute failure
4381bd4fe43Sopenharmony_ci* @par  NULL
4391bd4fe43Sopenharmony_ci*
4401bd4fe43Sopenharmony_ci* @see  NULL
4411bd4fe43Sopenharmony_ci
4421bd4fe43Sopenharmony_ci*/
4431bd4fe43Sopenharmony_cichar *ip4addr_ntoa(const ip4_addr_t *addr);
4441bd4fe43Sopenharmony_ci#define inet_ntoa(addr)  ip4addr_ntoa((ip4_addr_t*)&(addr))
4451bd4fe43Sopenharmony_ci
4461bd4fe43Sopenharmony_ci
4471bd4fe43Sopenharmony_citypedef void (*dns_found_callback)(const char *name, ip_addr_t *ipaddr, void *callback_arg);
4481bd4fe43Sopenharmony_cierr_t dns_gethostbyname(const char *hostname, ip_addr_t *addr,
4491bd4fe43Sopenharmony_ci                        dns_found_callback found, void *callback_arg);
4501bd4fe43Sopenharmony_ci
4511bd4fe43Sopenharmony_ci/**
4521bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
4531bd4fe43Sopenharmony_ci *
4541bd4fe43Sopenharmony_ci * Domain name and network address structure.CNcomment:域名和网络地址结构体CNend
4551bd4fe43Sopenharmony_ci *
4561bd4fe43Sopenharmony_ci */
4571bd4fe43Sopenharmony_cistruct hostent {
4581bd4fe43Sopenharmony_ci    char  *h_name;      /**< Indicates the official name of the host. */
4591bd4fe43Sopenharmony_ci    char **h_aliases;   /**< Indicates a pointer to an array of pointers to alternative host names,
4601bd4fe43Sopenharmony_ci                           terminated by a null pointer. */
4611bd4fe43Sopenharmony_ci    int    h_addrtype;  /**< Indicates the address type. */
4621bd4fe43Sopenharmony_ci    int    h_length;    /**< Indicates the length, in bytes, of the address. */
4631bd4fe43Sopenharmony_ci    char **h_addr_list; /**< Indicates a pointer to an array of pointers to network addresses (in
4641bd4fe43Sopenharmony_ci                           network byte order) for the host, terminated by a null pointer. */
4651bd4fe43Sopenharmony_ci#define h_addr h_addr_list[0] /* for backward compatibility */
4661bd4fe43Sopenharmony_ci};
4671bd4fe43Sopenharmony_ci
4681bd4fe43Sopenharmony_ci/**
4691bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
4701bd4fe43Sopenharmony_ci* @brief  Get IP address according to domain name.CNcomment:根据域名获取IP地址CNend
4711bd4fe43Sopenharmony_ci*
4721bd4fe43Sopenharmony_ci* @par Description:
4731bd4fe43Sopenharmony_ci*           The IP address is obtained by using the domain name in string format,
4741bd4fe43Sopenharmony_ci*           and the address information is loaded into the host domain name structure
4751bd4fe43Sopenharmony_ci*           CNcomment:利用字符串格式的域名获得IP地址,并且将地址信息装入hostent域名结构体CNend
4761bd4fe43Sopenharmony_ci*
4771bd4fe43Sopenharmony_ci* @attention  NULL
4781bd4fe43Sopenharmony_ci* @param  name            [IN]    Type #const char * the hostname to resolve.CNcomment:解析的域名CNend
4791bd4fe43Sopenharmony_ci*
4801bd4fe43Sopenharmony_ci* @retval #hostent        Execute successfully.
4811bd4fe43Sopenharmony_ci* @retval #NULL           Execute failed.
4821bd4fe43Sopenharmony_ci* @par Dependency:
4831bd4fe43Sopenharmony_ci*         #NULL
4841bd4fe43Sopenharmony_ci* @see  NULL
4851bd4fe43Sopenharmony_ci*/
4861bd4fe43Sopenharmony_cistruct hostent *gethostbyname(const char *name);
4871bd4fe43Sopenharmony_ci
4881bd4fe43Sopenharmony_ci/**
4891bd4fe43Sopenharmony_ci * @ingroup hi_net_basic
4901bd4fe43Sopenharmony_ci *
4911bd4fe43Sopenharmony_ci * Network interface structure.CNcomment:网络接口结构体CNend
4921bd4fe43Sopenharmony_ci *
4931bd4fe43Sopenharmony_ci */
4941bd4fe43Sopenharmony_cistruct netif {
4951bd4fe43Sopenharmony_ci#define NETIF_DATA_LEN 8
4961bd4fe43Sopenharmony_ci    unsigned char data[NETIF_DATA_LEN];
4971bd4fe43Sopenharmony_ci};
4981bd4fe43Sopenharmony_ci
4991bd4fe43Sopenharmony_ci/**
5001bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
5011bd4fe43Sopenharmony_ci* @brief  Get the corresponding interface pointer according to the interface name.
5021bd4fe43Sopenharmony_ci*         CNcomment:根据接口名字获取相应接口指针CNend
5031bd4fe43Sopenharmony_ci*
5041bd4fe43Sopenharmony_ci* @par Description:
5051bd4fe43Sopenharmony_ci*         Get the corresponding interface pointer according to the interface name
5061bd4fe43Sopenharmony_ci*         CNcomment:根据接口名字获取相应接口指针CNend
5071bd4fe43Sopenharmony_ci*
5081bd4fe43Sopenharmony_ci* @attention  NULL
5091bd4fe43Sopenharmony_ci* @param  name            [IN]    Type #const char * the interface name to find.CNcomment:要找的接口名字CNend
5101bd4fe43Sopenharmony_ci*
5111bd4fe43Sopenharmony_ci* @retval #struct netif * Execute successfully.
5121bd4fe43Sopenharmony_ci* @retval #NULL           Execute failed.
5131bd4fe43Sopenharmony_ci* @par Dependency:
5141bd4fe43Sopenharmony_ci*         #NULL
5151bd4fe43Sopenharmony_ci* @see  NULL
5161bd4fe43Sopenharmony_ci*/
5171bd4fe43Sopenharmony_cistruct netif *netif_find(const char *name);
5181bd4fe43Sopenharmony_ci
5191bd4fe43Sopenharmony_ci/**
5201bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
5211bd4fe43Sopenharmony_ci* @brief  Start DHCP client according to interface.CNcomment:根据接口启动dhcp客户端CNend
5221bd4fe43Sopenharmony_ci*
5231bd4fe43Sopenharmony_ci* @par Description:
5241bd4fe43Sopenharmony_ci*         Start DHCP client according to interface
5251bd4fe43Sopenharmony_ci*         CNcomment:根据接口启动dhcp客户端CNend
5261bd4fe43Sopenharmony_ci*
5271bd4fe43Sopenharmony_ci* @attention  NULL
5281bd4fe43Sopenharmony_ci* @param  netif      [IN]    Type #struct netif * Interface address.CNcomment:接口地址CNend
5291bd4fe43Sopenharmony_ci*
5301bd4fe43Sopenharmony_ci* @retval #ERR_OK    Execute successfully.
5311bd4fe43Sopenharmony_ci* @retval #OTHERS    Execute failed.
5321bd4fe43Sopenharmony_ci* @par Dependency:
5331bd4fe43Sopenharmony_ci*         #NULL
5341bd4fe43Sopenharmony_ci* @see  NULL
5351bd4fe43Sopenharmony_ci*/
5361bd4fe43Sopenharmony_cierr_t netifapi_dhcp_start(struct netif *netif);
5371bd4fe43Sopenharmony_ci
5381bd4fe43Sopenharmony_ci/**
5391bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
5401bd4fe43Sopenharmony_ci* @brief  Start DHCP server according to interface.CNcomment:根据接口启动dhcp服务端CNend
5411bd4fe43Sopenharmony_ci*
5421bd4fe43Sopenharmony_ci* @par Description:
5431bd4fe43Sopenharmony_ci*         Start DHCP server according to interface
5441bd4fe43Sopenharmony_ci*         CNcomment:根据接口启动dhcp服务端CNend
5451bd4fe43Sopenharmony_ci*
5461bd4fe43Sopenharmony_ci* @attention  NULL
5471bd4fe43Sopenharmony_ci* @param  netif      [IN]    Type #struct netif * Interface address.CNcomment:接口地址CNend
5481bd4fe43Sopenharmony_ci* @param  start_ip   [IN]    Type #char * Assigned client start address.CNcomment:分配的客户端起始地址CNend
5491bd4fe43Sopenharmony_ci* @param  ip_num     [IN]    Type #u16_t  Total number of clients assigned.CNcomment:分配的客户端总数目CNend
5501bd4fe43Sopenharmony_ci* @retval #ERR_OK    Execute successfully.
5511bd4fe43Sopenharmony_ci* @retval #OTHERS    Execute failed.
5521bd4fe43Sopenharmony_ci* @par Dependency:
5531bd4fe43Sopenharmony_ci*         #NULL
5541bd4fe43Sopenharmony_ci* @see  NULL
5551bd4fe43Sopenharmony_ci
5561bd4fe43Sopenharmony_ci*/
5571bd4fe43Sopenharmony_cierr_t netifapi_dhcps_start(struct netif *netif, char *start_ip, u16_t ip_num);
5581bd4fe43Sopenharmony_ci
5591bd4fe43Sopenharmony_ci/**
5601bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
5611bd4fe43Sopenharmony_ci* @brief  This API is used to set the the vendor class identifier information
5621bd4fe43Sopenharmony_ci*         of the netif, which is using in DHCP Message.
5631bd4fe43Sopenharmony_ci*         CNcomment:这个API用来设置dhcp的hostname消息CNend
5641bd4fe43Sopenharmony_ci*
5651bd4fe43Sopenharmony_ci* @par Description:
5661bd4fe43Sopenharmony_ci*         The hostname string lenght should be less than NETIF_HOSTNAME_MAX_LEN,
5671bd4fe43Sopenharmony_ci*         otherwise the hostname will truncate to (NETIF_HOSTNAME_MAX_LEN-1).
5681bd4fe43Sopenharmony_ci*         CNcomment:hostname的长度要小于NETIF_HOSTNAME_MAX_LEN,否则会被设置为(NETIF_HOSTNAME_MAX_LEN-1)CNend
5691bd4fe43Sopenharmony_ci*
5701bd4fe43Sopenharmony_ci* @attention  NULL
5711bd4fe43Sopenharmony_ci* @param  netif      [IN]    Type #struct netif * Interface address.CNcomment:接口地址CNend
5721bd4fe43Sopenharmony_ci* @param  hostname   [IN]    Type #char * hostname The new hostname to use.CNcomment:传入使用的名字CNend
5731bd4fe43Sopenharmony_ci* @param  namelen    [IN]    Type #u8_t The hostname string length.CNcomment:名称长度CNend
5741bd4fe43Sopenharmony_ci* @retval #ERR_OK    Execute successfully.
5751bd4fe43Sopenharmony_ci* @retval #ERR_ARG:  On passing invalid arguments.
5761bd4fe43Sopenharmony_ci* @par Dependency:
5771bd4fe43Sopenharmony_ci*       #NULL
5781bd4fe43Sopenharmony_ci* @see  NULL
5791bd4fe43Sopenharmony_ci*/
5801bd4fe43Sopenharmony_cierr_t netifapi_set_hostname(struct netif *netif, char *hostname, u8_t namelen);
5811bd4fe43Sopenharmony_ci
5821bd4fe43Sopenharmony_ci
5831bd4fe43Sopenharmony_ci/**
5841bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
5851bd4fe43Sopenharmony_ci* @brief  This API is used to set the vendor class identifier information, which is used in DHCP message.
5861bd4fe43Sopenharmony_ci*         CNcomment:设置dhcp消息的vci信息CNend
5871bd4fe43Sopenharmony_ci*
5881bd4fe43Sopenharmony_ci* @par Description:
5891bd4fe43Sopenharmony_ci*    Length of vendor class identifier information string ,should be not more than DHCP_VCI_MAX_LEN(default 32),
5901bd4fe43Sopenharmony_ci*    otherwise it will return with ERR_ARG. vci_len is the real length of vendor class identifier information string.
5911bd4fe43Sopenharmony_ci*    CNcomment:vci消息长度不超过32个字节,否则会返回ERR_ARG,vci_len是厂商分类信息的真实长度CNend
5921bd4fe43Sopenharmony_ci*
5931bd4fe43Sopenharmony_ci* @attention  NULL
5941bd4fe43Sopenharmony_ci* @param  vci    [IN]    Type #char * The new vendor class identifier information to use.CNcomment:厂商设备信息数据CNend
5951bd4fe43Sopenharmony_ci* @param  vci_len [IN]    Type #u8_t   The length of vendor class identifier information string.CNcomment:上述数据的长度CNend
5961bd4fe43Sopenharmony_ci* @retval #ERR_OK On success
5971bd4fe43Sopenharmony_ci* @retval #ERR_ARG On passing invalid arguments
5981bd4fe43Sopenharmony_ci* @retval #ERR_VAL On failure
5991bd4fe43Sopenharmony_ci* @par Dependency:
6001bd4fe43Sopenharmony_ci*       #NULL
6011bd4fe43Sopenharmony_ci* @see  NULL
6021bd4fe43Sopenharmony_ci*/
6031bd4fe43Sopenharmony_cierr_t netifapi_set_vci(char *vci, u8_t vci_len);
6041bd4fe43Sopenharmony_ci
6051bd4fe43Sopenharmony_ci/**
6061bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
6071bd4fe43Sopenharmony_ci* @brief  allocate a socket.CNcomment:分配套接字CNend
6081bd4fe43Sopenharmony_ci*
6091bd4fe43Sopenharmony_ci* @par Description:
6101bd4fe43Sopenharmony_ci*        It creates an endpoint for communication and returns a file descriptor
6111bd4fe43Sopenharmony_ci*        CNcomment:为通信创建一个端点并返回一个文件描述符CNend
6121bd4fe43Sopenharmony_ci*
6131bd4fe43Sopenharmony_ci* @attention  NULL
6141bd4fe43Sopenharmony_ci* @param  domain     [IN]    Type #int Specifies a protocol family.CNcomment:指定协议族CNend
6151bd4fe43Sopenharmony_ci* @param  type       [IN]    Type #int Specifies the socket type.CNcomment:指定协议类型CNend
6161bd4fe43Sopenharmony_ci* @param  protocol   [IN]    Type #int Specifies the protocol to be used with the socket.
6171bd4fe43Sopenharmony_ci*                            CNcomment:指定要与套接字一起使用的协议CNend
6181bd4fe43Sopenharmony_ci* @retval #>0       Execute successfully.
6191bd4fe43Sopenharmony_ci* @retval #-1       Execute failed.
6201bd4fe43Sopenharmony_ci* @par Dependency:
6211bd4fe43Sopenharmony_ci*       #NULL
6221bd4fe43Sopenharmony_ci* @see  NULL
6231bd4fe43Sopenharmony_ci*/
6241bd4fe43Sopenharmony_ciint socket(int domain, int type, int protocol);
6251bd4fe43Sopenharmony_ci
6261bd4fe43Sopenharmony_ci/**
6271bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
6281bd4fe43Sopenharmony_ci* @brief  bind a socket.CNcomment:绑定套接字CNend
6291bd4fe43Sopenharmony_ci*
6301bd4fe43Sopenharmony_ci* @par Description:
6311bd4fe43Sopenharmony_ci*        It creates an endpoint for communication and returns a file descriptor
6321bd4fe43Sopenharmony_ci*        CNcomment:为通信创建一个端点并返回一个文件描述符CNend
6331bd4fe43Sopenharmony_ci*
6341bd4fe43Sopenharmony_ci* @attention  NULL
6351bd4fe43Sopenharmony_ci* @param s     [IN]    Type #int Specifies the file descriptor of the socket to be bound.CNcomment:要绑定的描述符CNend
6361bd4fe43Sopenharmony_ci* @param name  [IN]    Type #struct sockaddr *  Points to a sockaddr structure containing the address
6371bd4fe43Sopenharmony_ci*                              to be bound to the socket.    CNcomment:指向包含要绑定到套接字的地址的sockaddr结构CNend
6381bd4fe43Sopenharmony_ci* @param namelen [IN] Type #socklen_t Specifies the length of the sockaddr structure pointed to by the address argument.
6391bd4fe43Sopenharmony_ci*                                     CNcomment:指定address参数指向的sockaddr结构的长度CNend
6401bd4fe43Sopenharmony_ci* @retval #0        Execute successfully.
6411bd4fe43Sopenharmony_ci* @retval #-1       Execute failed.
6421bd4fe43Sopenharmony_ci* @par Dependency:
6431bd4fe43Sopenharmony_ci*       #NULL
6441bd4fe43Sopenharmony_ci* @see  NULL
6451bd4fe43Sopenharmony_ci*/
6461bd4fe43Sopenharmony_ciint bind(int s, const struct sockaddr *name, socklen_t namelen);
6471bd4fe43Sopenharmony_ci
6481bd4fe43Sopenharmony_ci/**
6491bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
6501bd4fe43Sopenharmony_ci* @brief  Get socket optional fields.CNcomment:获取套接字可选字段CNend
6511bd4fe43Sopenharmony_ci*
6521bd4fe43Sopenharmony_ci* @par Description:
6531bd4fe43Sopenharmony_ci*        Get socket optional fields
6541bd4fe43Sopenharmony_ci*        CNcomment:获取套接字可选字段CNend
6551bd4fe43Sopenharmony_ci*
6561bd4fe43Sopenharmony_ci* @attention  NULL
6571bd4fe43Sopenharmony_ci* @param  socket  [IN]       Type #int Specifies a socket file descriptor.CNcomment:指定的文件描述符CNend
6581bd4fe43Sopenharmony_ci* @param  level   [IN]       Type #int Specifies the protocol level at which the option resides.
6591bd4fe43Sopenharmony_ci*                                      CNcomment:指定选项所在的协议级别CNend
6601bd4fe43Sopenharmony_ci* @param  option_name  [IN]  Type #int Specifies a single option to set.CNcomment:指定选项的名字CNend
6611bd4fe43Sopenharmony_ci* @param  option_value [OUT] Type #void * Indicates the pointer to the option value.CNcomment:指示指向选项值的指针CNend
6621bd4fe43Sopenharmony_ci* @param  option_len   [IN]  Type #socklen_t * Specifies the size of option value.CNcomment:指定选项的值CNend
6631bd4fe43Sopenharmony_ci* @retval #0     Execute successfully.
6641bd4fe43Sopenharmony_ci* @retval #-1    Execute failed.
6651bd4fe43Sopenharmony_ci* @par Dependency:
6661bd4fe43Sopenharmony_ci*       #NULL
6671bd4fe43Sopenharmony_ci* @see  NULL
6681bd4fe43Sopenharmony_ci*/
6691bd4fe43Sopenharmony_ciint getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
6701bd4fe43Sopenharmony_ci
6711bd4fe43Sopenharmony_ci/**
6721bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
6731bd4fe43Sopenharmony_ci* @brief  Set socket optional fields.CNcomment:设置套接字可选字段CNend
6741bd4fe43Sopenharmony_ci*
6751bd4fe43Sopenharmony_ci* @par Description:
6761bd4fe43Sopenharmony_ci*        Set socket optional fields
6771bd4fe43Sopenharmony_ci*        CNcomment:设置套接字可选字段CNend
6781bd4fe43Sopenharmony_ci*
6791bd4fe43Sopenharmony_ci* @attention  NULL
6801bd4fe43Sopenharmony_ci* @param  socket    [IN]     Type #int Specifies a socket file descriptor.CNcomment:指定的文件描述符CNend
6811bd4fe43Sopenharmony_ci* @param  level     [IN]     Type #int Specifies the protocol level at which the option resides.
6821bd4fe43Sopenharmony_ci*                                      CNcomment:指定选项所在的协议级别CNend
6831bd4fe43Sopenharmony_ci* @param  option_name  [IN]  Type #int Specifies a single option to set.CNcomment:指定选项的名字CNend
6841bd4fe43Sopenharmony_ci* @param  option_value [OUT] Type #void * Indicates the pointer to the option value.CNcomment:指示指向选项值的指针CNend
6851bd4fe43Sopenharmony_ci* @param  option_len   [IN]  Type #socklen_t Specifies the size of option value.CNcomment:指定选项的值CNend
6861bd4fe43Sopenharmony_ci* @retval #0     Execute successfully.
6871bd4fe43Sopenharmony_ci* @retval #-1    Execute failed.
6881bd4fe43Sopenharmony_ci* @par Dependency:
6891bd4fe43Sopenharmony_ci*       #NULL
6901bd4fe43Sopenharmony_ci* @see  NULL
6911bd4fe43Sopenharmony_ci*/
6921bd4fe43Sopenharmony_ciint setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
6931bd4fe43Sopenharmony_ci
6941bd4fe43Sopenharmony_ci/**
6951bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
6961bd4fe43Sopenharmony_ci* @brief  Accepts a new connection on a socket.CNcomment:套接字上接收一个连接CNend
6971bd4fe43Sopenharmony_ci*
6981bd4fe43Sopenharmony_ci* @par Description:
6991bd4fe43Sopenharmony_ci*        Accepts a new connection on a socket
7001bd4fe43Sopenharmony_ci*        CNcomment:套接字上接收一个连接CNend
7011bd4fe43Sopenharmony_ci*
7021bd4fe43Sopenharmony_ci* @attention  NULL
7031bd4fe43Sopenharmony_ci* @param  socket    [IN]   Type #int Specifies a socket that was created with socket(),has been bound to an address
7041bd4fe43Sopenharmony_ci*                               with bind(),and has issued a successful call to listen().
7051bd4fe43Sopenharmony_ci*                               CNcomment:指定用socket()创建的套接字,该套接字已bind()绑定,并已成功调用listen()CNend
7061bd4fe43Sopenharmony_ci* @param  address   [OUT]  Type #struct sockaddr * Indicates either a null pointer, or a pointer to a sockaddr structure
7071bd4fe43Sopenharmony_ci*                                 where the address of the connecting socket shall be returned.
7081bd4fe43Sopenharmony_ci*                                 CNcomment:指示空指针或指向sockaddr结构的指针,其中应返回连接套接字的地址CNend
7091bd4fe43Sopenharmony_ci* @param  address_len  [IN,OUT]  Type #socklen_t * Indicates either a null pointer,if address is a null pointer,
7101bd4fe43Sopenharmony_ci*                                                  or a pointer to a socklen_t object which on input
7111bd4fe43Sopenharmony_ci*                                 specifies the length of the supplied sockaddr structure,and on output specifies
7121bd4fe43Sopenharmony_ci*                                 the length of the stored address.
7131bd4fe43Sopenharmony_ci*                                 CNcomment:如果地址是空指针,则指示空指针,或者指示指向socklen_t对象的指针,
7141bd4fe43Sopenharmony_ci*                                           该对象在输入时指定提供的sockaddr结构的长度,在输出时指定存储地址的长度.CNend
7151bd4fe43Sopenharmony_ci* @retval #>0     Execute successfully.
7161bd4fe43Sopenharmony_ci* @retval #-1     Execute failed.
7171bd4fe43Sopenharmony_ci* @par Dependency:
7181bd4fe43Sopenharmony_ci*       #NULL
7191bd4fe43Sopenharmony_ci* @see  NULL
7201bd4fe43Sopenharmony_ci*/
7211bd4fe43Sopenharmony_ciint accept(int s, struct sockaddr *addr, socklen_t *addrlen);
7221bd4fe43Sopenharmony_ci
7231bd4fe43Sopenharmony_ci/**
7241bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
7251bd4fe43Sopenharmony_ci* @brief  Connection to peer IP address.CNcomment:连接对端IP地址CNend
7261bd4fe43Sopenharmony_ci*
7271bd4fe43Sopenharmony_ci* @par Description:
7281bd4fe43Sopenharmony_ci*        attempt to make a connection on a connection-mode socket or to set or
7291bd4fe43Sopenharmony_ci*        reset the peer address of a connectionless-mode socket
7301bd4fe43Sopenharmony_ci*        CNcomment:尝试在连接模式套接字上建立连接,或设置或重置无连接模式套接字的对等地址CNend
7311bd4fe43Sopenharmony_ci*
7321bd4fe43Sopenharmony_ci* @attention  NULL
7331bd4fe43Sopenharmony_ci* @param      s     [IN]  Type #int Specifies a socket file descriptor.CNcomment:指定套接字CNend
7341bd4fe43Sopenharmony_ci* @param      name  [IN]  Type #struct sockaddr * Specifies a pointer to the sockaddr structure
7351bd4fe43Sopenharmony_ci*                            which identifies the connection. CNcomment:指定指向sockaddr结构的指针,该结构标识连接CNend
7361bd4fe43Sopenharmony_ci* @param      namelen [IN] Type # socklen_t Specifies the size of name structure.
7371bd4fe43Sopenharmony_ci*                                 CNcomment:指定名字结构体的长度CNend
7381bd4fe43Sopenharmony_ci* @retval #0     Execute successfully.
7391bd4fe43Sopenharmony_ci* @retval #-1    Execute failed.
7401bd4fe43Sopenharmony_ci* @par Dependency:
7411bd4fe43Sopenharmony_ci*       #NULL
7421bd4fe43Sopenharmony_ci* @see  NULL
7431bd4fe43Sopenharmony_ci*/
7441bd4fe43Sopenharmony_ciint connect(int s, const struct sockaddr *name, socklen_t namelen);
7451bd4fe43Sopenharmony_ci
7461bd4fe43Sopenharmony_ci/**
7471bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
7481bd4fe43Sopenharmony_ci* @brief  Recieve a message from connected socket.CNcomment:从已经连接的套接字接收消息CNend
7491bd4fe43Sopenharmony_ci*
7501bd4fe43Sopenharmony_ci* @par Description:
7511bd4fe43Sopenharmony_ci*        Recieve a message from connected socket.
7521bd4fe43Sopenharmony_ci*        CNcomment:从已经连接的套接字接收消息CNend
7531bd4fe43Sopenharmony_ci*
7541bd4fe43Sopenharmony_ci* @attention  NULL
7551bd4fe43Sopenharmony_ci* @param      socket  [IN]  Type #int    Specifies the socket file descriptor.CNcomment:指定套接字CNend
7561bd4fe43Sopenharmony_ci* @param      buffer  [OUT] Type #void *  Points to a buffer where the message should be stored.
7571bd4fe43Sopenharmony_ci*                                         CNcomment:接收存储的缓存CNend
7581bd4fe43Sopenharmony_ci* @param      length  [IN]  Type #size_t  Specifies the length in bytes of the buffer pointed to by the buffer argument.
7591bd4fe43Sopenharmony_ci*                                         CNcomment:每次接收的长度CNend
7601bd4fe43Sopenharmony_ci* @param      flags   [IN]  Type #int     Specifies the type of message reception.CNcomment:指定套接字的标志位CNend
7611bd4fe43Sopenharmony_ci* @retval #>0     Execute successfully.
7621bd4fe43Sopenharmony_ci* @retval #-1     Execute failed.
7631bd4fe43Sopenharmony_ci* @par Dependency:
7641bd4fe43Sopenharmony_ci*       #NULL
7651bd4fe43Sopenharmony_ci* @see  NULL
7661bd4fe43Sopenharmony_ci*/
7671bd4fe43Sopenharmony_ciint recv(int s, void *mem, size_t len, int flags);
7681bd4fe43Sopenharmony_ci
7691bd4fe43Sopenharmony_ci/**
7701bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
7711bd4fe43Sopenharmony_ci* @brief  Recieve a message from connected socket.CNcomment:从已经连接的套接字接收消息CNend
7721bd4fe43Sopenharmony_ci*
7731bd4fe43Sopenharmony_ci* @par Description:
7741bd4fe43Sopenharmony_ci*        Recieve a message from connected socket.
7751bd4fe43Sopenharmony_ci*        CNcomment:从已经连接的套接字接收消息CNend
7761bd4fe43Sopenharmony_ci*
7771bd4fe43Sopenharmony_ci* @attention  NULL
7781bd4fe43Sopenharmony_ci* @param      socket    [IN]    Type #int     Specifies the socket file descriptor.CNcomment:指定套接字CNend
7791bd4fe43Sopenharmony_ci* @param      buffer    [OUT]   Type #void *  Points to a buffer where the message should be stored.
7801bd4fe43Sopenharmony_ci*                                             CNcomment:接收存储的缓存CNend
7811bd4fe43Sopenharmony_ci* @param      length    [IN]    Type #size_t  Specifies the length in bytes of the buffer pointed to
7821bd4fe43Sopenharmony_ci*                                             by the buffer argument.CNcomment:每次接收的长度CNend
7831bd4fe43Sopenharmony_ci* @param      flags     [IN]    Type #int     Specifies the type of message reception.CNcomment:指定套接字的标志位CNend
7841bd4fe43Sopenharmony_ci* @param      flags     [IN]    Type #struct  sockaddr *  A null pointer, or points to a sockaddr structure in which
7851bd4fe43Sopenharmony_ci*                                                        the sending address is to be stored.
7861bd4fe43Sopenharmony_ci*                                                        CNcomment:空指针,或指向要存储发送地址的sockaddr结构CNend
7871bd4fe43Sopenharmony_ci* @param      flags     [IN]    Type #socklen_t *   Either a null pointer, if address is a null pointer, or a pointer
7881bd4fe43Sopenharmony_ci*                        to a socklen_t objectwhich on input specifies the length of the supplied sockaddr structure,
7891bd4fe43Sopenharmony_ci*                        and on output specifies the length of the stored address.
7901bd4fe43Sopenharmony_ci*                        CNcomment:如果地址是空指针,则为空指针,或者指向socklen_t对象的指针,
7911bd4fe43Sopenharmony_ci*                        该对象在输入时指定提供的sockaddr结构的长度,在输出时指定存储地址的长度CNend
7921bd4fe43Sopenharmony_ci* @retval #>0     Execute successfully.
7931bd4fe43Sopenharmony_ci* @retval #-1     Execute failed.
7941bd4fe43Sopenharmony_ci* @par Dependency:
7951bd4fe43Sopenharmony_ci*       #NULL
7961bd4fe43Sopenharmony_ci* @see  NULL
7971bd4fe43Sopenharmony_ci*/
7981bd4fe43Sopenharmony_ciint recvfrom(int s, void *mem, size_t len, int flags,
7991bd4fe43Sopenharmony_ci             struct sockaddr *from, socklen_t *fromlen);
8001bd4fe43Sopenharmony_ci
8011bd4fe43Sopenharmony_ci/**
8021bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
8031bd4fe43Sopenharmony_ci* @brief Initiates transmission of a message from the specified socket to its peer.CNcomment:传输指定长度消息到对端CNend
8041bd4fe43Sopenharmony_ci*
8051bd4fe43Sopenharmony_ci* @par Description:
8061bd4fe43Sopenharmony_ci*        Initiates transmission of a message from the specified socket to its peer
8071bd4fe43Sopenharmony_ci*        CNcomment:启动从指定套接字到其对等端的消息传输。CNend
8081bd4fe43Sopenharmony_ci*
8091bd4fe43Sopenharmony_ci* @attention  NULL
8101bd4fe43Sopenharmony_ci* @param      socket  [IN]  Type #int     Specifies the socket file descriptor.CNcomment:指定套接字CNend
8111bd4fe43Sopenharmony_ci* @param      buffer  [IN]  Type #void *  Specifies a buffer containing the message to send.
8121bd4fe43Sopenharmony_ci*                                         CNcomment:指定要发送的缓存CNend
8131bd4fe43Sopenharmony_ci* @param      length  [IN]  Type #size_t  Specifies the length of the message to send.CNcomment:指定消息长度CNend
8141bd4fe43Sopenharmony_ci* @param      flags   [IN]  Type #int     Specifies the type of message reception.CNcomment:指定套接字的标志位CNend
8151bd4fe43Sopenharmony_ci* @retval #>0     Execute successfully.
8161bd4fe43Sopenharmony_ci* @retval #-1     Execute failed.
8171bd4fe43Sopenharmony_ci* @par Dependency:
8181bd4fe43Sopenharmony_ci*       #NULL
8191bd4fe43Sopenharmony_ci* @see  NULL
8201bd4fe43Sopenharmony_ci*/
8211bd4fe43Sopenharmony_ciint send(int s, const void *dataptr, size_t size, int flags);
8221bd4fe43Sopenharmony_ci
8231bd4fe43Sopenharmony_ci/**
8241bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
8251bd4fe43Sopenharmony_ci* @brief  send messages from a connection-oriented and connectionless sockets.
8261bd4fe43Sopenharmony_ci*         CNcomment:从面向连接和无连接的套接字发送消息CNend
8271bd4fe43Sopenharmony_ci*
8281bd4fe43Sopenharmony_ci* @par Description:
8291bd4fe43Sopenharmony_ci*      If the socket is in the connectionless mode, the message is sent to the address specified by the 'to' parameter.
8301bd4fe43Sopenharmony_ci*
8311bd4fe43Sopenharmony_ci*      CNcomment:如果套接字处于无连接模式,则将消息发送到“to”参数指定的地址
8321bd4fe43Sopenharmony_ci*                如果套接字处于连接模式,则忽略“to”参数中的目标地址CNend
8331bd4fe43Sopenharmony_ci* @attention  NULL
8341bd4fe43Sopenharmony_ci* @param      socket    [IN]   Type #int    Specifies the socket file descriptor.CNcomment:指定套接字CNend
8351bd4fe43Sopenharmony_ci* @param      buffer    [IN]   Type #void * Specifies a buffer containing the message to send.
8361bd4fe43Sopenharmony_ci*                                           CNcomment:指定要发送的缓存CNend
8371bd4fe43Sopenharmony_ci* @param      length    [IN]   Type #size_t Specifies the length of the message to send.CNcomment:指定消息长度CNend
8381bd4fe43Sopenharmony_ci* @param      flags     [IN]   Type #int    Specifies the type of message reception.CNcomment:指定套接字的标志位CNend
8391bd4fe43Sopenharmony_ci* @param      flags     [IN]   Type #struct sockaddr *  Specifies a pointer to the sockaddr structure
8401bd4fe43Sopenharmony_ci*                                                       that contains the destination address.
8411bd4fe43Sopenharmony_ci*                                                       CNcomment:指定指向包含目标地址的sockaddr结构的指针CNend
8421bd4fe43Sopenharmony_ci* @param      flags     [IN]   Type #socklen_t *        Specifies the size of the 'to' structure.
8431bd4fe43Sopenharmony_ci*                                                       CNcomment:指定“to”结构的大小CNend
8441bd4fe43Sopenharmony_ci* @retval #>0     Execute successfully.
8451bd4fe43Sopenharmony_ci* @retval #-1     Execute failed.
8461bd4fe43Sopenharmony_ci* @par Dependency:
8471bd4fe43Sopenharmony_ci*       #NULL
8481bd4fe43Sopenharmony_ci* @see  NULL
8491bd4fe43Sopenharmony_ci*/
8501bd4fe43Sopenharmony_ciint sendto(int s, const void *dataptr, size_t size, int flags,
8511bd4fe43Sopenharmony_ci           const struct sockaddr *to, socklen_t tolen);
8521bd4fe43Sopenharmony_ci
8531bd4fe43Sopenharmony_ci/**
8541bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
8551bd4fe43Sopenharmony_ci* @brief  Allows a program to monitor multiple file descriptors.CNcomment:允许程序监视多个文件描述符CNend
8561bd4fe43Sopenharmony_ci*
8571bd4fe43Sopenharmony_ci* @par Description:
8581bd4fe43Sopenharmony_ci*        select() can monitor only file descriptors numbers that are less than FD_SETSIZE.
8591bd4fe43Sopenharmony_ci*        select() uses a timeout that is a struct timeval (with seconds and microseconds).
8601bd4fe43Sopenharmony_ci*        CNcomment:select()只能监视小于FD_SETSIZE的文件描述符编号.
8611bd4fe43Sopenharmony_ci*                  select()使用的超时值是struct timeval(秒和微秒)CNend
8621bd4fe43Sopenharmony_ci* @attention  NULL
8631bd4fe43Sopenharmony_ci* @param      nfds      [IN]  Type #int Specifies a range of file descriptors.CNcomment:允许程序监视多个文件描述符CNend
8641bd4fe43Sopenharmony_ci* @param      readfds   [IN]  Type #fd_set *  Specifies a pointer to struct fd_set, and specifies the descriptor to
8651bd4fe43Sopenharmony_ci*                                             check for being ready to read.
8661bd4fe43Sopenharmony_ci*                                             CNcomment:指定struct fd_set的指针,并要检查是否准备好读取的描述符CNend
8671bd4fe43Sopenharmony_ci* @param      writefds  [IN]  Type #fd_set *  Specifies a pointer to struct fd_set, and specifies the descriptor
8681bd4fe43Sopenharmony_ci*                                             to check for being ready to write.CNcomment:
8691bd4fe43Sopenharmony_ci*                                             指定指向struct fd_set的指针,并指定要检查是否准备好写入的描述符CNend
8701bd4fe43Sopenharmony_ci* @param     exceptfds  [IN]  Type #fd_set *  Specifies a pointer to struct fd_set, and specifies the descriptor
8711bd4fe43Sopenharmony_ci*                                             to check for pending error conditions.CNcomment:
8721bd4fe43Sopenharmony_ci*                                             指定指向struct fd_set的指针,并指定要检查挂起错误条件的描述符CNend
8731bd4fe43Sopenharmony_ci* @param     timeout    [IN]  Type #struct timeval *  Specifies a pointer to struct timeval, for timeout application.
8741bd4fe43Sopenharmony_ci*                                                      CNcomment:为超时应用程序指定指向struct timeval的指针CNend
8751bd4fe43Sopenharmony_ci* @retval #>0     Execute successfully.
8761bd4fe43Sopenharmony_ci* @retval #-1     Execute failed.
8771bd4fe43Sopenharmony_ci* @par Dependency:
8781bd4fe43Sopenharmony_ci*       #NULL
8791bd4fe43Sopenharmony_ci* @see  NULL
8801bd4fe43Sopenharmony_ci
8811bd4fe43Sopenharmony_ci*/
8821bd4fe43Sopenharmony_ci#if LWIP_TIMEVAL_PRIVATE
8831bd4fe43Sopenharmony_ciint select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,
8841bd4fe43Sopenharmony_ci           struct timeval *timeout);
8851bd4fe43Sopenharmony_ci#endif
8861bd4fe43Sopenharmony_ci/**
8871bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
8881bd4fe43Sopenharmony_ci* @brief Initiates transmission of a message from the specified socket to its peer.CNcomment:传输指定长度消息到对端CNend
8891bd4fe43Sopenharmony_ci*
8901bd4fe43Sopenharmony_ci* @par Description:
8911bd4fe43Sopenharmony_ci*      Initiates transmission of a message from the specified socket to its peer
8921bd4fe43Sopenharmony_ci*      CNcomment:启动从指定套接字到其对等端的消息传输。CNend
8931bd4fe43Sopenharmony_ci*
8941bd4fe43Sopenharmony_ci* @attention  NULL
8951bd4fe43Sopenharmony_ci* @param      s      [IN]   Type #int  Indicates the socket file descriptor.CNcomment:指定文件描述符CNend
8961bd4fe43Sopenharmony_ci* @param      cmd    [IN]   Type #int  Indicates a command to select an operation[F_GETFL, F_SETFL].
8971bd4fe43Sopenharmony_ci*                                      CNcomment:指示选择操作的命令[F_GETFL, F_SETFL]CNend
8981bd4fe43Sopenharmony_ci* @param      val    [IN]   Type #int  Indicates an additional flag, to set non-blocking.
8991bd4fe43Sopenharmony_ci*                                      CNcomment:指示一个附加标志,以设置非阻塞CNend
9001bd4fe43Sopenharmony_ci* @retval #0               Execute successfully.
9011bd4fe43Sopenharmony_ci* @retval #-1 & Others     Execute failed.
9021bd4fe43Sopenharmony_ci* @par Dependency:
9031bd4fe43Sopenharmony_ci*       #NULL
9041bd4fe43Sopenharmony_ci* @see  NULL
9051bd4fe43Sopenharmony_ci*/
9061bd4fe43Sopenharmony_ciint fcntl(int s, int cmd, int val);
9071bd4fe43Sopenharmony_ci
9081bd4fe43Sopenharmony_ci/**
9091bd4fe43Sopenharmony_ci* @ingroup  hi_net_basic
9101bd4fe43Sopenharmony_ci* @brief  Close the socket.CNcomment:关闭套接字CNend
9111bd4fe43Sopenharmony_ci*
9121bd4fe43Sopenharmony_ci* @par Description:
9131bd4fe43Sopenharmony_ci*      If O_NONBLOCK is not set and if there is data on the module's write queue,
9141bd4fe43Sopenharmony_ci*      close() waits for an unspecified time for any output to drain before dismantling the STREAM.
9151bd4fe43Sopenharmony_ci*      If the O_NONBLOCK flag is set,close() does not wait for output to drain, and dismantles the STREAM immediately.
9161bd4fe43Sopenharmony_ci*      CNcomment:如果未设置O_NONBLOCK,并且模块的写入队列中有数据,close()等待未指定的时间,等待任何输出排出,然后再拆卸流.
9171bd4fe43Sopenharmony_ci*                如果设置了O_NONBLOCK标志,close()不会等待输出耗尽,并立即取消流CNend
9181bd4fe43Sopenharmony_ci*
9191bd4fe43Sopenharmony_ci* @attention  NULL
9201bd4fe43Sopenharmony_ci* @param      s    [IN]     Type #int  Indicates the socket file descriptor.CNcomment:指定文件描述符CNend
9211bd4fe43Sopenharmony_ci* @retval #0               Execute successfully.
9221bd4fe43Sopenharmony_ci* @retval #-1 & Others     Execute failed.
9231bd4fe43Sopenharmony_ci* @par Dependency:
9241bd4fe43Sopenharmony_ci*       #NULL
9251bd4fe43Sopenharmony_ci* @see  NULL
9261bd4fe43Sopenharmony_ci*/
9271bd4fe43Sopenharmony_ciint closesocket(int s);
9281bd4fe43Sopenharmony_ci#define close(s)  closesocket(s)
9291bd4fe43Sopenharmony_ci
9301bd4fe43Sopenharmony_ci#ifdef __cplusplus
9311bd4fe43Sopenharmony_ci}
9321bd4fe43Sopenharmony_ci#endif
9331bd4fe43Sopenharmony_ci
9341bd4fe43Sopenharmony_ci#endif
935