一般来说, IO::Socket::INET里的Timeout设置是对于conncet的
如果你想设置recv接收超时, 可以这样设置:

  1. usr Socket:
  2. ......
  3. setsockopt($socket, SOL_SOCKET, SO_RCVTIMEO, pack('l!l!', , ));
  4. #注意这里pack有三个参数, 后面的1表示超时1秒, 最后的0你可以默认
  5. #而前面的'l!l!', !表示64位平台
  6. #如果你是用IO::Socket::INET他的socket, 可以这样:
  7. use IO::Socket::INET;
  8. my $socket = IO::Socket::INET->new();
  9. $socket->setsockopt(SOL_SOCKET, SO_RCVTIMEO, pack('l!l!', , ));
  10.  
  11. #如果你觉得麻烦, 可以安装 IO::Socket::Timeout模块, 用如下方式设置接收超时或发送超时:
  12. # 1. Creates a socket as usual
  13. my $socket = IO::Socket::INET->new( ... );
  14.  
  15. # 2. Enable read and write timeouts on the socket
  16. IO::Socket::Timeout->enable_timeouts_on($socket);
  17.  
  18. # 3. Setup the timeouts
  19. $socket->read_timeout(0.5);
  20. $socket->write_timeout(0.5);
  21.  
  22. # 4. Use the socket as usual
  23. my $data = <$socket>;
  24.  
  25. #

这里有一点要说明, 可能新人有点迷惑。
那就是io::socket::inet创一个socket时, 这个socket是未定义的, 要等 到它连接成功了才变成定义状态。
所以, 当你用io::socket::timeout时, 记得要连接成功了才调用, 要不会出现error, 提示方法不能用于一个未定义的变量。

像上面的代码所示, 如果把20行放到17行的位置, 程序将会出错。

文章参考自:http://blog.booking.com/socket-timeout-made-easy.html

perl Socket接收超时设置的更多相关文章

  1. C# Socket连接超时设置

    问题描述:         对于C# Socket没有超时设置的选项,默认情况下进行Socket连接,返回连接失败需要20-30s时间,严重影响用户体验 问题解决: Socket服务器端: Socke ...

  2. connect socket的超时设置

    最近项目中,有个需求是检测某ip地址是否是通的,使用了socket的connect函数.但是,当ip地址写错的话,connect就会一直阻塞在那里,大概2.3分钟才能返回连接失败.这对于用户来说是不可 ...

  3. LR Socket接收超时TPS上不去解决方法

    在一次做项目中,由于Socket协议接收的报文会有不定长度,基本每次都会有变化,在data.ws 接收buf1有固定长度,这是在接收的实时报文会有长度不一致的问题.这时LR默认会去与接收的报文的长度及 ...

  4. 【c#】设置Socket连接、接收超时(转)

    用到Socket,发现如果连接错误,比如Connect的端口不对,会造成很长时间的延时,程序就僵在那里,效果很不好: 在网上找到很方便的设置办法,分享如下: Socket.SetSocketOptio ...

  5. 【c#】设置Socket连接、接收超时

    用到Socket,发现如果连接错误,比如Connect的端口不对,会造成很长时间的延时,程序就僵在那里,效果很不好: 在网上找到很方便的设置办法,分享如下: Socket.SetSocketOptio ...

  6. 设置socket接收和发送超时的一种方式

    Linux环境设置Socket接收和发送超时: 须如下定义:struct timeval timeout = {3,0};  //设置发送超时setsockopt(socket,SOL_SOCKET, ...

  7. C++ Socket超时设置

    用winsocket时,send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,可以设置收发时限:int nNetTimeout = 1000; //1秒//发送时限setsocko ...

  8. php socket 超时设置

    1.php创建socket的方法和设置超时的方法,贴出来分享一下 //如果$waitAckSec=0,则返回成功发送的字节�? //如果$waitAckSec大于0,则返回发送后接收到得内容 //任何 ...

  9. VC socket Connect 超时时间设置

    设置connect超时很简单,CSDN上也有人提到过使用select,但却没有一个令人满意与完整的答案.偶所讲的也正是select函数,此函数集成在winsock1.1中,简单点讲,"作用使 ...

随机推荐

  1. winform控件跨线程委托

    1. this.listBox1.BeginInvoke(new Action(() => { if (listBox1.Items.Count > 20) listBox1.Items. ...

  2. abowman

    http://abowman.com/google-modules/ball-clock/

  3. .net导出不规则Excel

    using Hamp.App.BLL; using Hamp.App.Model; using Hamp.App.Model.QualityManagement; using System; usin ...

  4. 为什么重写equals()必须重写hashCode()

    主要原因是因为hashCode是用对象的内部地址转换成一个整数的,而equals比较得是两个对象,或者是两个对象的内容 如果你重写了equals,而保留hashCode的实现不变,那么很可能两个对象明 ...

  5. mysql中的unix_timestamp函数

    偶然看到MySQL的一个函数 unix_timestamp(),不明就里,于是就试验了一番. unix_timestamp()函数的作用是返回一个确切的时间点的UNIX时间戳,这个Unix时间戳是一个 ...

  6. Busy Beavers(暴力模拟)

    由于排版问题,题目无法显示,可以到 http://7xjob4.com1.z0.glb.clouddn.com/e4872a15819b6bf9d1e5250bacc2a30b  查看 题目大意是有只 ...

  7. this笔记

    在js中,如果this在全局变量和函数中this指window,在在对象中至所挂载的这个对象.

  8. 详细解析Java中抽象类和接口的区别(转)

    转自:http://dev.yesky.com/436/7581936.shtml 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机 ...

  9. openstack私有云布署实践【12.1 网络Neutron-controller节点配置(科兴环境)】

    网络这一块推荐使用的是 Neutron--LinuxBirdge的Ha高可用,此高可用方案对Public作用不是很大,Public只用到DHCP,而Private则会用到L3 Agent,则此方案是有 ...

  10. zoj 1508 poj 1201 Intervals

    差分约束系统. #include<cstdio> #include<cstring> #include<cmath> #include<vector> ...