免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1907 | 回复: 3

AnyEvent::Socket判断连接断开异常 [复制链接]

论坛徽章:
0
发表于 2013-04-17 22:17 |显示全部楼层
10可用积分
连接了个python的tcpserver,AnyEvent::Handle在python的tcpserver断开时在on_error和on_eof都无法知道连接被断开了,为啥阿?

论坛徽章:
0
发表于 2013-04-18 07:56 |显示全部楼层
贴代码                  

论坛徽章:
0
发表于 2013-04-18 10:13 |显示全部楼层
与perl的socket没发现问题,相同代码
  1.     tcp_connect $if_ip,$if_port,
  2.         sub {
  3.             my ($sock)=@_;
  4.             unless ($sock) {
  5.                 $interface->{$if_info}=undef;
  6.                 delete $interface->{$if_info};
  7.                 $log->w_log(5,"[conn_interface] Could not connect to interfaceService $if_ip:$if_port");
  8.                 return;
  9.             }
  10.             my $handle;
  11.             eval {
  12.                 $handle = AnyEvent::Handle->new (
  13.                     fh => $sock,
  14.                     on_read => sub {
  15.                         my $buf = delete $_[0]->{rbuf};
  16.                         if (defined($buf)) {
  17.                             push(@{$interface->{$if_info}->{recv_buf}},$buf);
  18.                             &check_recv_buf("interface",$if_info);
  19.                         }
  20.                     },
  21.                     on_eof => sub {
  22.                         $handle->destroy;
  23.                         undef $interface->{$if_info};
  24.                         delete $interface->{$if_info};
  25.                         $log->w_log(5,"[conn_interface] connection eof:$!");
  26.                     },
  27.                     on_error => sub {
  28.                         $handle->destroy;
  29.                         undef $interface->{$if_info};
  30.                         delete $interface->{$if_info};
  31.                         $log->w_log(5,"[conn_interface] connection error");
  32.                     },
  33.                 );
  34.             };
  35.             unless($handle) {
  36.                 $interface->{$if_info}=undef;
  37.                 delete $interface->{$if_info};
  38.                 $log->w_log(5,"[conn_interface] Create AnyEvent::Handle error!");
  39.                 return;
  40.             }
  41.             $interface->{$if_info}->{status}=1;
  42.             $interface->{$if_info}->{sock} = $sock;
  43.         }, sub {
  44.             5
  45.         };
复制代码

论坛徽章:
0
发表于 2013-04-20 23:17 |显示全部楼层
你贴的客户端的代码中我没有看到$cv->send,猜测是你服务器端做$cv->send,但这不符合常理。一般情况下是客户端做$cv->send,服务器端会捕捉到on_eof

你说用Perl的服务器端的话,客户端就可以捕捉到on_eof,猜测是因为你写的Perl服务器端做了$cv->send,这样客户端就可以捕捉到on_eof了

ps.建议用push_read和push_write,“delete $_[0]->{rbuf};”并不好,缺乏灵活性,并不适用于项目中,也就是写简单例子时候用一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:help@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP