我发现至少有3种方法可以从perl中的非阻塞套接字读取
$socket->recv
$socket->sysread
POSIX::read($socket,...
看起来像同一个东西的3个不同的名字,我读了文件,但我找不到一个巨大的不同。任何人吗?
答案 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文件句柄的文件描述符。