FD_SET问题/网络

FD_SET Problem/Networking

本文关键字:网络 问题 SET FD      更新时间:2023-10-16

嗨,现在我想知道如果客户端或服务器断开连接,然后发送一个错误,但我似乎不能使它工作,我不知道如何做到这一点,所以我真的需要帮助,请

这是我的代码

    #ifdef _WIN32 || _WIN64
            if(select(0,&fd_read,NULL,&fd_close,&time)==-1){
                printf("Error in Select()");
                return 0;
            }
    #else
            if(select(sockMax + 1,&fd_read,NULL,&fd_close,&time)==-1){
                printf("Error in Select()");
                return 0;
            }
    #endif
 if(FD_ISSET(socklisten,&fd_read)){
        }
        else
        {
            dopack(&pkt);
            send(socklisten, (char*)&pkt, sizeof(pack), 0);
        }

//this is where the error shows -----------
        if(FD_SET(socklisten,&fd_close))
        {
            backtoMenu = true;
        }
        FD_ZERO(&fd_leer);
        FD_SET(sockEscucha,&fd_leer);

在'do'之前显示预期的主表达式所以我不知道那是什么意思以防万一我就是这样声明fd_read和fd_close的

fd_set fd_read;       
fd_set fd_close;   

Richard所说的,另外,传递给select()的第三个fd_set不是关于关闭fd的,而是一些需要特别注意的特殊条件(确切地说,是由底层驱动程序定义的,例如,TCP套接字使用它来处理"紧急"数据)。

通过recv()的返回代码检测远程关闭,即在可读描述符的处理中。如果流套接字上的recv()返回0,表示远端已经关闭连接(使用TCP,你仍然可以发送数据,因为只有一个方向是关闭的);如果recv()返回-1,则errno有进一步的信息,例如,ECONNRESET表示收到了TCP RST数据包。

你想使用if(FD_ISSET(…

要确定客户端是否已关闭,您需要从活动readfd中读取数据,并查看读取是否返回零。