找回密码
 注册
查看: 699|回复: 0

請問如何判斷socket斷線?

[复制链接]
发表于 2004-11-17 11:19:04 | 显示全部楼层 |阅读模式
FD_ZERO(&rset);
for(listnum=0;listnum<SerNum;listnum++) {
        if(connectlist[listnum] != 0) {
                FD_SET(connectlist[listnum], &rset);
        if(connectlist[listnum] > highsock)
                highsock = connectlist[listnum];
        }
        }
       
timeout.tv_sec = 1;
timeout.tv_usec = 0;
int i = select (highsock+3, &rset, Null, (fd_set *)0, &timeout);
if(i < 0) {
        printf("select error\n");
        return;
}
else if(i == 0) {
        printf("Time Out.\n");
        return;
}
else {  //read data
        for(i=0;i<SerNum;i++) {
                if(FD_ISSET(connectlist, &rset)) { //有資料可讀
                n = recv(connectlist, &readbuf[size-left], left, 0);
                        if(n<=0)
                                printf("socket disconnect\n");
                }
         }
}

socket is nonblocking socket.
同時select多條socket, 當有一條socket當掉, 因其他socket正常, 所以select回傅大於零的值就會進入read data裡. 用FD_ISSET來判斷那一個socket有資料可讀才讀. 所以那一個當掉的socket一直都沒有辦法偵測到.
請問有什麼好的辦法來偵測有socket當掉或太久沒有在傅資料呢?
希望大家多多指教, 謝謝.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-11 21:32 , Processed in 0.019697 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表