4

我在 perl 中找到至少 3 种从非阻塞套接字读取的方法

$socket->recv
$socket->sysread
POSIX::read($socket,...

看起来同一事物有 3 个不同的名称,我阅读了文档,但找不到一个巨大的不同之处。任何人?

4

2 回答 2

8

sysread是面向流(TCP)的(它不关心一个发送在哪里结束,另一个在哪里开始),并且recv是面向数据报(UDP)的(它确实关心)。

POSIX::read适用于文件描述符,而sysread适用于文件句柄。

于 2012-11-25T02:44:52.947 回答
2

最好的文档来源recv()man recvfrom- 它基本上是该系统调用的 perl 接口。请注意,recv()它通常用于设置为非面向连接的套接字(即 UDP 套接字),但也可用于面向连接(即 TCP)的套接字。

和之间read()的人的区别是:sysread()POSIX::read()

  • read(...)获取文件句柄并缓冲 IO
  • sysread(...)获取文件句柄并且 IO 没有缓冲
  • POSIX::read(...)接受一个文件描述符并且 IO 没有被缓冲

文件描述符是一个由 . 返回的值(一个小整数)POSIX::open()fileno()此外,您可以通过该函数获取 perl 文件句柄的文件描述符。

于 2012-11-25T08:43:22.483 回答