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