网络tcp 断线情况

网络tcp 断线情况

select 后的socket连接一下:



0.正常发送
    如:fd = 57;5 = send(fd,"hello",5,0);
    strerror(0) = Success




1.任何一方close,对方的recv都会马上到消息,并返回0.


2.send 一个已经close的fd 会返回-1;
    如:fd = 57; close(fd); -1 = send(fd,"hello",5,0);
    strerror(9) = Bad file descriptor


3.send一个无效的fd. 返回-1;
    如:fd = -1; -1 = send(fd,"hello",5,0);
    strerror(9) = Bad file descriptor


4.如果
        fd = -1;
select(fd + 1, NULL, &writefds, NULL, &tm_out);
// fd = -1;  放到这里也是一样的。


        //测试指定句柄是否可以操作
        if(FD_ISSET(fd, &writefds))
{
   //进不来。
}


5.客户端如果更新IP(不会显示任何一方断开连接,只会认为网络状态不良),正在send的send函数会阻塞
        select 超时设置会失效,使用SO_SNDTIMEO就会有效果,就在阻塞的send使用SO_SNDTIMEO的timeout时间
       {返回已经发送的字节数,如需发1024,超时后返回了800}
        之后用回select的timout时间。
        tv_out.tv_sec = m_SendTimeOut / 1000;
        tv_out.tv_usec = (m_SendTimeOut % 1000) * 1000;
//设置发送超时
        setsockopt(m_ConnectFd, SOL_SOCKET, SO_SNDTIMEO, (char*)&tv_out, sizeof(tv_out));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值