FD_SET问题/网络
FD_SET Problem/Networking
嗨,现在我想知道如果客户端或服务器断开连接,然后发送一个错误,但我似乎不能使它工作,我不知道如何做到这一点,所以我真的需要帮助,请
这是我的代码
#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中读取数据,并查看读取是否返回零。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 为什么我的程序在打开网络设备时遇到问题
- OpenCV-从C/C++中的默认网络摄像头获取图片-GTK问题
- 我可以使用Boost::Asio而不用担心网络编程问题吗?
- 我的分类神经网络有逻辑问题
- 神经网络 MLP 问题
- C++ 网络和锁定问题
- 实现应用程序网络协议的安全问题
- 在Windows 10/OpenCV下访问网络摄像头时出现问题
- Caffe网络初始化出现问题
- winsock - recv -网络连接问题
- 神经网络与遗传算法问题
- SFML网络问题
- 将c++转换为VB.网络问题
- FD_SET问题/网络
- openCV-网络摄像头的视频捕获-延迟问题
- 我在神经网络中实现反向传播时遇到了问题
- 链接网络 pbm 库时出现问题
- 网络字节顺序和字节序问题
- 网络爬虫链接提取问题