1

如果可用,我正在调用读取函数来捕获接收到的数据包。当没有要获取的数据包时,我得到 errno EAGAIN,但是当网络断开连接时,我也得到 EAGAIN,所以我无法区分这两种情况。

    while ( ((n = read(sockfd, &(buffer[pos]), 1)) > 0) and not messageFound) {

            //reading byte by byte
            if (n == 1) {
               // Some stuff.. 
            }
        }

// Never returning 0, but when returning negative values:
        if (n < 0){
            qDebug()<< "Read error #" << errno << ": " << strerror(errno);
            if(errno != EAGAIN){ // It is always this error, so it's never entering here
                qDebug()<< "Disconnected. Reason #" << errno << ": " << strerror(errno);
                *connected = false;
            }
        }

有什么方法可以检查套接字是否已断开连接,或者在调用 read 之前知道是否有可用的数据包?(我尝试使用 select 但似乎不起作用)

4

1 回答 1

3

对于 POSIX 套接字,关闭连接和没有数据准备好之间的区别在于返回值。当连接关闭时,返回值为 0,当没有数据时返回负值(参见手册页

于 2012-04-26T09:55:14.833 回答