c++ - FD_SET 问题/网络

标签 c++ networking select

嗨,现在我想知道客户端或服务器是否断开连接,然后发送错误,但我似乎无法让它工作,我不知道该怎么做,所以我真的需要帮助 plz

这是我的代码

    #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;   

请提供任何帮助,tyvm 将不胜感激

最佳答案

另外,Richard所说的,传递给select()的第三个fd_set不是关闭的FD,而是一些需要特别注意的异常情况(which确切地说,是由底层驱动程序定义的,例如,TCP 套接字将它用于“紧急”数据。

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

关于c++ - FD_SET 问题/网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6619263/

相关文章:

c# - 关闭远程系统?

php - MYSQL选择所有具有最近日期的记录

c# - 很难弄清楚 (uint8_t const * const *) 在 .Net 术语中的含义

c++ - 如何调用带参数指针的函数指针?

linux - 简单通用即插即用 ( uPNP ) 在网络上查找 Raspberry Pi

javascript - Jquery选择语句

javascript - 从 html select 中选择的总和

c++ - 为什么 MFC DoModal 返回 -1 ? -1 是什么意思?

c++ - 您可以将 nullptr 与其他指针进行比较以进行排序吗?它总是更小吗?

javascript - 使用 httpPost 的 422 响应返回 {"response":{}} instead of the actual API response