Perl 套接字recv、sysread和Posix::read-in套接字之间的区别?
我在perl中找到了至少3种读取非阻塞套接字的方法Perl 套接字recv、sysread和Posix::read-in套接字之间的区别?,perl,Perl,我在perl中找到了至少3种读取非阻塞套接字的方法 $socket->recv $socket->sysread POSIX::read($socket,... 看起来有三个不同的名字是同一件事,我读了文件,但我找不到一个巨大的不同。有人吗?sysread是面向流(TCP)的(它不关心一个发送的结束和另一个发送的开始),而recv是面向数据报(UDP)的(它关心) POSIX::read用于文件描述符,而sysread用于文件句柄。有关recv()的最佳文档来源是man recvf
$socket->recv
$socket->sysread
POSIX::read($socket,...
看起来有三个不同的名字是同一件事,我读了文件,但我找不到一个巨大的不同。有人吗?
sysread
是面向流(TCP)的(它不关心一个发送的结束和另一个发送的开始),而recv
是面向数据报(UDP)的(它关心)
POSIX::read
用于文件描述符,而sysread
用于文件句柄。有关recv()
的最佳文档来源是man recvfrom
——它基本上是该系统调用的perl接口。请注意,recv()
通常用于设置为非面向连接(即UDP套接字)的套接字,但也可用于面向连接(即TCP)的套接字
read()
、sysread()
和POSIX::read()
之间的主要区别是:
接受一个文件句柄并缓冲IOread(…)
接受一个文件句柄,并且IO没有缓冲sysread(…)
采用文件描述符,且IO未缓冲POSIX::read(…)
POSIX::open()
返回的值(小整数)。
此外,您还可以通过
fileno()
函数获取perl文件句柄的文件描述符。更正:recv
实际上也可以用于流。它甚至可能比sysread
更好recv
仅适用于套接字,而sysread
适用于所有流(例如,它也适用于普通文件)。另请参见:(注意,这是关于内置的read
POSIX::read
更接近sysread
)