我在 perl 中找到至少 3 种从非阻塞套接字读取的方法
$socket->recv
$socket->sysread
POSIX::read($socket,...
看起来同一事物有 3 个不同的名称,我阅读了文档,但找不到一个巨大的不同之处。任何人?
我在 perl 中找到至少 3 种从非阻塞套接字读取的方法
$socket->recv
$socket->sysread
POSIX::read($socket,...
看起来同一事物有 3 个不同的名称,我阅读了文档,但找不到一个巨大的不同之处。任何人?
sysread
是面向流(TCP)的(它不关心一个发送在哪里结束,另一个在哪里开始),并且recv
是面向数据报(UDP)的(它确实关心)。
POSIX::read
适用于文件描述符,而sysread
适用于文件句柄。
最好的文档来源recv()
是man recvfrom
- 它基本上是该系统调用的 perl 接口。请注意,recv()
它通常用于设置为非面向连接的套接字(即 UDP 套接字),但也可用于面向连接(即 TCP)的套接字。
和之间read()
的人的区别是:sysread()
POSIX::read()
read(...)
获取文件句柄并缓冲 IOsysread(...)
获取文件句柄并且 IO 没有缓冲POSIX::read(...)
接受一个文件描述符并且 IO 没有被缓冲文件描述符是一个由 . 返回的值(一个小整数)POSIX::open()
。fileno()
此外,您可以通过该函数获取 perl 文件句柄的文件描述符。