我最近也要寫一個(gè)這方面類似的程序,有空可以交流一下
@Sunshine Alike
如果select返回的是0的話,那該怎么判斷了
我的方法不一樣,我用getsockopt來判斷,還是蠻準(zhǔn)確的
int SocketConnected(int sock)
{
if(sock<=0)
return 0;
struct tcp_info info;
int len=sizeof(info);
getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
if((info.tcpi_state==TCP_ESTABLISHED))
{
//myprintf("socket connected\n");
return 1;
}
else
{
//myprintf("socket disconnected\n");
return 0;
}
}
我是用sue的方法,但是觀察日志覺得好像有不準(zhǔn)確的情況。因?yàn)榭蛻舳嗽跀嚅_后十幾秒后程序重連還是能夠重新連上的(注:局域網(wǎng)環(huán)境)。我也有看到判斷為斷開后,重連也連不上的情況。這使我對(duì)他將信將疑。
@su
socket(阻塞)沒有數(shù)據(jù)可讀時(shí),select超時(shí),不會(huì)去recv(),要怎么判斷socket斷開連接?