我在 Perl 中以这种方式创建了非阻塞 UDP 套接字
my $my_sock = IO::Socket::INET->new(LocalPort => $MY_PORT,
Proto => 'udp',
Blocking => '0') or die "socket: $@";
recv 调用是
my $retValue = $sock->recv($my_message, 64);
我需要知道 a) 当没有数据可供读取时 b) 如果有数据,读取了多少数据 c) 任何错误情况
令人惊讶的是,我在perldoc中没有看到recv的任何返回值。当我自己尝试时,recv在(a)中返回undef,对于b来说它是一个不可打印的字符
这似乎是一个基本问题。但是,我仍然找不到有关谷歌搜索或堆栈溢出的信息。感谢您的任何输入
最佳答案
根据 perldoc,recv“如果 SOCKET 协议(protocol)支持,则返回发送者的地址;否则返回空字符串。如果出现错误,则返回未定义的值。”
如果您收到 undef,则意味着 recv 遇到错误。
您的代码中的错误位于以下行:
$retValue = $sock->recv($my_message, 64);
recv的函数原型(prototype)是:
recv SOCKET,SCALAR,LENGTH,FLAGS
根据 perldoc,recv“尝试从指定的 SOCKET 文件句柄将数据的 LENGTH 个字符接收到变量 SCALAR 中。SCALAR 将增大或缩小到实际读取的长度。”
尝试:
$retvalue = recv($sock, $my_message, 64)
这是我获取所有信息的地方: http://perldoc.perl.org/functions/recv.html
关于perl - perl中recv()函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10579477/