PR_ImportTCPSocket¶
将本地 TCP 套接字导入 NSPR。
语法¶
#include "private/pprio.h"
PRFileDesc* PR_ImportTCPSocket(PROsfd osfd);
参数¶
该函数具有以下参数
osfd
要导入的 TCP 套接字的本地文件描述符。在 POSIX 系统上,这是一个
int
。在 Windows 上,这是一个SOCKET
。
返回值¶
该函数返回以下值之一
成功完成时,指向为新导入的本地 TCP 套接字创建的 PRFileDesc 对象的指针。
如果本地 TCP 套接字的导入失败,则返回
NULL
。
描述¶
可以使用 PR_ImportTCPSocket 将本地 TCP 套接字 osfd
导入到 NSPR 中。调用方放弃对本地 TCP 套接字 osfd
的控制权,并应改为使用 PR_ImportTCPSocket 返回的 PRFileDesc*
。
虽然 PR_ImportTCPSocket 是一个受支持的函数,但它在 "private/pprio.h"
中声明,以强调此函数依赖于 NSPR 实现的内部细节。调用方需要了解 NSPR 将对本地文件描述符执行的操作,并确保 NSPR 可以成功使用本地文件描述符。
例如,在 POSIX 系统上,NSPR 将通过调用 fcntl
在本地文件描述符上设置 O_NONBLOCK
文件状态标志来将本地文件描述符(一个 int
)置于非阻塞模式,然后 NSPR 将在本地文件描述符上调用套接字函数,例如 recv
、send
和 poll
。在 PR_ImportTCPSocket 调用之前,调用方不得对本地文件描述符执行任何操作,这些操作会阻止本地文件描述符在非阻塞模式下工作。
警告¶
理论上,使用 PR_ImportTCPSocket 的代码在 NSPR 的实现发生更改时可能会出现问题。实际上,这种情况不太可能发生,因为 NSPR 的实现多年来一直保持稳定,并且由于 NSPR 对向后兼容性的坚定承诺。使用 PR_ImportTCPSocket 比编写包装本地 TCP 套接字的 NSPR I/O 层要方便得多。当然,最好只使用 PR_OpenTCPSocket 或 PR_NewTCPSocket。如果您不确定 PR_ImportTCPSocket 是否适合您,请在 mozilla.dev.tech.nspr 新闻组中咨询。