Connect : Connection refused

linux 服务器 端一直检查是否有数据 发送给客户端。 如果有一直发(send)  , 非阻塞的
linux 客户端 connect 服务 器端成功后  做如下循环接收  ,阻塞的

int rlen  = -1;
while(1)
{
   rlen = recv();  //阻塞
   if(rlen < 0)
   {
       perror("recv");
       break;
   }
}
close(socket );
return;

运行一段时间后发现 客户端 recv  接收到104 信号
recv:   Connection reset by peer

在服务器端send 也收到

send:  Connection reset by peer



参考了如下(http://hi.baidu.com/tangzhenjian ... 75434879f05570.html

假设Server A上面有Process X,它有一个socket M,和另外的Server B上面的Process Y的 Socket N以TCP协议连接上了,那么,据我所知,有2种情况会出现RST包:

(1)X没有close socket就退出了,然后Y继续向M send数据,A的内核就会发送RST 到 socket N;

(2)X设置了SO_LINGER,其中l_onoff 非0, l_linger 为0,这样当A close socket M的时候,也会发送RST到socket N。

当socket N收到了RST,select的结果为socket可读,则:

(a)如果这个时候调用recv,返回-1,errno为ECONNRESET,如果再次调用recv,返回-1,errno为EPIPE,同事产生EPIPE信号;

(b)如果这个时候调用send,返回-1,errno为EPIPE,同时会产生SIGPIPE信号。



我的问题是 既然我client 收到RST,很迷惑怎么产生的RST   我在服务器端只是调用了send ,而且在send出现异常的时候,在close(clientsockfd) 连接之前我都有
shutdown(clientsockfd,SH_WR);  防止产生RST

 

 


该问题调试了1天多,居然发现是因为IP冲突导致的, 罪过 罪过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值