TCP连接在没有数据交互式判断连接断开

非阻塞模式下,建立连接没有调用send()和recv()进行数据交互的情况怎么判断服务端连接主动断开?

通过recv()函数,没有数据时返回-1,服务端断开返回0,通过返回0判断服务端是否断开


unsigned long  u32NonBlock = 1;
if ( ioctlsocket(pDlg->m_s32Socket, FIONBIO, &u32NonBlock) )     // 非阻塞
{
closesocket(pDlg->m_s32Socket);
pDlg->m_s32Socket = -1;
continue;
}


CHAR sTemBuf[2] = {0};
INT s32Ret = recv(pDlg->m_s32Socket,sTemBuf, sizeof(sTemBuf), 0);
if (0 == s32Ret) // 判断服务器是否主动断开 断开返回0
{
closesocket(pDlg->m_s32Socket);
pDlg->m_s32Socket = -1;
}


u32NonBlock = 0;
if ( ioctlsocket(pDlg->m_s32Socket, FIONBIO, &u32NonBlock) )     // 阻塞
{
closesocket(pDlg->m_s32Socket);
pDlg->m_s32Socket = -1;
continue;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Linux兵工厂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值