附录 D - 与 Azure RTOS NetX BSD 兼容的套接字 API

与 BSD 兼容的套接字 API

与 BSD 兼容的套接字 API 通过利用下面的 Azure RTOS NetX 基元来支持 BSD 套接字 API 调用的一部分(存在一些限制)。 支持 IPv4 协议和网络寻址。 由于此 API 利用内部 NetX 基元并绕过不必要的 NetX 错误检查,这一个与 BSD 兼容的套接字 API 层的执行速度应比典型的 BSD 实现快或稍快。

可配置选项允许主机应用程序定义最大套件数、TCP 最大窗口大小和侦听队列的深度。

由于性能和体系结构约束,这一个与 BSD 兼容的套接字 API 不支持所有 BSD 套接字调用。 此外,并非所有 BSD 选项都可用于 BSD 服务,具体如下:

  • select 函数只能与 fd_set *readfds 一起使用,不支持此调用中的其他参数(例如 writefds、exceptfds)。
  • send、recv、sendto 和 recvfrom 函数不支持 int flags 参数。 与 BSD 兼容的套接字 API 仅支持有限的一组 BSD 套接字调用。

源代码设计简单,仅由两个文件组成,即 nx_bsd.c 和 nx_bsd.h。 安装需要将这两个文件添加到生成项目(不是 NetX 库)并创建将使用 BSD 套接字服务调用的主机应用程序。 nx_bsd.h 文件也必须包含在应用程序源中。 示例演示文件随分发一起提供,随时可用于 NetX。 如需了解详细信息,请参阅与 BSD 兼容的套接字 API 417 帮助以及与 BSD 兼容的套接字 API 包随附的自述文件。

与 BSD 兼容的套接字 API 支持以下 BSD 套接字 API 调用:

*INT bsd_initialize (NX_IP *default_ip, NX_PACKET_POOL *default_pool,
    CHAR *bsd_memory_not_used);*

*INT getpeername( INT sockID, struct sockaddr *remoteAddress, INT *addressLength);*

*INT getsockname( INT sockID, struct sockaddr *localAddress, INT *addressLength);*

*INT recvfrom(INT sockID, CHAR *buffer, INT buffersize,
    INT flags,struct sockaddr *fromAddr, INT *fromAddrLen);*

*INT recv(INT sockID, VOID *rcvBuffer, INT bufferLength, INT flags);*

*INT sendto(INT sockID, CHAR *msg, INT msgLength, INT flags,
    struct sockaddr *destAddr, INT destAddrLen);*

*INT send(INT sockID, const CHAR *msg, INT msgLength, INT flags);*

 *INT accept(INT sockID, struct sockaddr *ClientAddress, INT *addressLength);*

*INT listen(INT sockID, INT backlog);*

*INT bind (INT sockID, struct sockaddr *localAddress, INT addressLength);*

*INT connect(INT sockID, struct sockaddr *remoteAddress, INT addressLength);*

*INT socket( INT protocolFamily, INT type, INT protocol);*

*INT soc_close ( INT sockID);*

*INT select(INT nfds, fd_set *readfds, fd_set *writefds,
    fd_set *exceptfds, struct timeval *timeout);*

*VOID FD_SET(INT fd, fd_set *fdset);*

*VOID FD_CLR(INT fd, fd_set *fdset);*

*INT FD_ISSET(INT fd, fd_set *fdset);*

*VOID FD_ZERO(fd_set *fdset);*