Socket recv,sysread和Posix :: read在套接字中的区别?

时间:2012-11-25 02:38:00

标签: perl

我发现至少有3种方法可以从perl中的非阻塞套接字读取

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

看起来像同一个东西的3个不同的名字,我读了文件,但我找不到一个巨大的不同。任何人吗?

2 个答案:

答案 0 :(得分:6)

sysread面向流(TCP)(它不关心一个发送结束的位置和另一个发送结束),recv是面向数据报(UDP)(它关心)。

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

答案 1 :(得分:0)

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

read()sysread()POSIX::read()之间的人差异是:

  • read(...)获取文件句柄并缓存IO
  • sysread(...)接受文件句柄并且IO未缓冲
  • POSIX::read(...)获取文件描述符且IO未缓冲

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