C++ 若并没有数据可读取,但若断开网络连接,读取套接字也会导致错误

C++ 若并没有数据可读取,但若断开网络连接,读取套接字也会导致错误,c++,sockets,C++,Sockets,我正在调用read函数来捕获接收到的数据包(如果可用)。当并没有数据包要获取时,我得到的是errno-EAGAIN,但当网络断开时,我也得到了EAGAIN,所以我无法区分这两种情况 while ( ((n = read(sockfd, &(buffer[pos]), 1)) > 0) and not messageFound) { //reading byte by byte if (n == 1) {

我正在调用read函数来捕获接收到的数据包(如果可用)。当并没有数据包要获取时,我得到的是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;
            }
        }
while((n=read(sockfd,&(buffer[pos]),1))>0)和notmessagefound){
//逐字节读取
如果(n==1){
//一些东西。。
}
}
//从不返回0,但返回负值时:
if(n<0){

qDebug()对于POSIX套接字,关闭连接和无数据准备之间的区别在于返回值。当连接关闭时,返回值为0,当没有数据时,返回值为负值(请参阅)

很抱歉,但它不是那样工作的。如果我断开笔记本电脑与WiFi网络的连接,read函数返回负值,EAGAIN为errno。我需要另一种解决方案。凯,我的错,我错过了与网络的断开连接。手册页说明,当对等方执行有序关机时,返回值将为0。