socket编程中的超时设置示例详解之三(Perl实现)

本文详细介绍了使用Perl语言实现socket连接、发送和接收数据时的超时设置,包括实例代码演示,每种socket操作最多进行五次重试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三、Perl语言实现的socket超时设置
Perl同样也有对connect, send/recv的不同超时设置。
下面的示例代码对这两种超时都做了设置,并每一种socket操作都做最多五次重试。


#! /usr/bin/perl
###############################################################################
# \File
#  tcp_client.pl
# \Descript
#  send message to server
###############################################################################
use IO::Socket;
use IO::Select;


my $ip = shift;


#hash to install IP Port
%srv_info =(
      "srv_ip"  => "192.168.1.73",
      "srv_port"=> "8080",
      );


my $srv_addr = $srv_info{"srv_ip"};
my $srv_port = $srv_info{"srv_port"};
my $sock;


foreach(0..4)
{
  $sock = IO::Socket::INET->new(
        PeerAddr => "$srv_addr",
        PeerPort => "$srv_port",
        Type     => SOCK_STREAM,
        Blocking => 1,
        Timeout  => 2,
        Proto    => "tcp");
  if ($sock)
  {
    last;
  } 
  else
  { 
    print "Connect timeout\n";
  } 
}


if (!$sock)
{
  print "Cann't connect to server\n";
  exit;
}


my $timeout = 2;
my $sel = IO::Select->new($sock);
foreach(0..4)
{
  my $fh_write = $sel->can_write($timeout);
  if ($fh_write)
  {
    $sock->send("Hello server!\n", 0) or warn "send failed: $!, $@";
    $sock->autoflush(1);
    last;
  }
  else
  {
    print "Send timeout!\n";
  }
}


foreach(0..4)
{
  my $fh_read = $sel->can_read($timeout);
  if ($fh_read)
  {
    my $rcv = <$sock>;
    print "RCV : ",$rcv, "\n";
    last;
  }
  else
  {
    print "Recv timeout\n";
  }
}


$sock->close();
exit;

用九,见群龙无首,吉。

【白话】用九,出现群龙也不愿意为首的现象,是很吉利的。

 

《象》曰:“用九”,天德不可为首也。

【白话】《象辞》说:“用九”的爻象说明,天虽生万物,但却不居首、不居功。



​​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北雨南萍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值