c++ - 在套接字 send() 和 receive() 上使用超时

标签 c++ c sockets network-programming tcpsocket

始终使用 select() 或 poll() 并对 send() 和 receive() 调用施加 10 秒超时是个好主意吗?或者我应该允许他们无限期地阻止?

强加这种超时(使用 select() 或 poll())是否会导致我失去某种错误报告或功能(以返回值的形式),而这些错误报告或功能(以返回值的形式)是我在使用 send() 和 recv 时可以获得的()?

注意:假设我在调用 recv() 或 send() 之前在同一个线程中进行轮询。对 poll() 的调用是静态格式良好的,即除了基于调用包装的 recv() 或 send() 的参数之外,参数不会动态更改

另一个注意事项:如果出现超时,那么我将抛出异常并让程序员捕获它。我希望这能防止 DOS 攻击。如果确实有超时的话。我将抛出异常并且无法调用recv()或send()

还有一个注意事项:与我正在谈论的内容相关的源代码可以在这里找到 https://beej.us/guide/bgnet/output/html/singlepage/bgnet.html#faq在类似的常见问题解答下

谢谢!

最佳答案

超时后您要做什么?如果您要再次开始等待,那么超时不会给您带来任何好处。

如果您要关闭连接并将其标记为死亡,那么超时非常有用。

关于c++ - 在套接字 send() 和 receive() 上使用超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34531332/

相关文章:

c++ - 是什么导致 boost::coroutine 随机崩溃?

c++ - vector<float> 写入文件

c - 如何比较 float 和 double?

C:指针算术的评估:操作何时完成?

java - Java 中的 SocketChannel 发送数据,但没有到达目标应用程序

c++ - 使用 ITK 写入图像

c++ - 允许使用右值捕获但不分配给的运算符重载

sockets - 使用 IN6ADDR_SETV4MAPPED 和双堆栈套接字

c - 为什么我无法从我写入文本的文件中读取数据。 C

networking - 如何实现分两个进程接收和发送数据的TCP服务器?