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 将在本地文件描述符上调用套接字函数,例如 recvsendpoll。在 PR_ImportTCPSocket 调用之前,调用方不得对本地文件描述符执行任何操作,这些操作会阻止本地文件描述符在非阻塞模式下工作。

警告

理论上,使用 PR_ImportTCPSocket 的代码在 NSPR 的实现发生更改时可能会出现问题。实际上,这种情况不太可能发生,因为 NSPR 的实现多年来一直保持稳定,并且由于 NSPR 对向后兼容性的坚定承诺。使用 PR_ImportTCPSocket 比编写包装本地 TCP 套接字的 NSPR I/O 层要方便得多。当然,最好只使用 PR_OpenTCPSocketPR_NewTCPSocket。如果您不确定 PR_ImportTCPSocket 是否适合您,请在 mozilla.dev.tech.nspr 新闻组中咨询。