注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
shuangshumei的个人空间 https://home.eeworld.com.cn/space-uid-89478.html [收藏] [复制] [分享] [RSS]
日志

关于perl 的 recv

已有 1569 次阅读2009-3-16 16:32 |个人分类:脚本语言 Perl

最近写一个脚本,其中有TCP连接的需求,典型的client/server的模式,其中发现一个问题:

假定此处的TCP连接已经建立,称为 $connection, 当收取数据包的时候,最初是采取 $connection -> recv( my $text, $length) 来读取内容的,(通过约定双方前4字节传送总的内容的length, 先解析收到的前四个字节, 得到$length的值),实际上就是说,这种处理方式是想要读取exactly $length bytes。

但是有人看完脚本,提了个问题, 说是使用recv($text, $length)时,表示可以接收的长度为1~$length,即使incoming的message长度达到$length bytes, 但偶尔还是会发生$text的长度不足实际长度的问题。

一种solution是使用sysread代替:

while ($bytes_to_read) {

$bytes_read = sysread ($socket, $bufrcv,$bytes_to_read, $offset);

$bytes_to_read -= $bytes_read;

$offset += $bytes_read;

 }

 查了查资料,没有找到发生这种问题的root cause, 据说与操作系统相关。还是有些无法很好的理解,先做个问题书签,留待以后补充。

全部作者的其他最新日志
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章