【发布时间】:2016-04-04 12:50:01
【问题描述】:
总是使用 select() 或 poll() 并在 send() 和 recv() 调用上施加 10 秒超时是个好主意吗?还是我应该让他们无限期地阻止?
施加这种超时(使用 select() 或 poll())是否会导致我失去某种错误报告或功能(以返回值的形式),而我只使用 send() 和 recv 时可以获得的()?
注意:假设我在调用 recv() 或 send() 之前在同一个线程中轮询。并且对 poll() 的调用是静态格式良好的,即参数不会动态变化,除了它们如何基于包装的 recv() 或 send() 的调用
另一个注意事项:如果有超时,那么我将抛出一个异常并让程序员捕捉它。我希望这可以防止 DOS 攻击。如果确实有超时。我会抛出一个异常,而不是调用 recv() 或 send()
还有一个注意事项:与我正在谈论的内容相关的源代码可以在此处https://beej.us/guide/bgnet/output/html/singlepage/bgnet.html#faq 在类似的常见问题解答下找到
谢谢!
【问题讨论】:
-
您到底想解决什么问题?如果出现超时,你会怎么做?重新开始投票?还是退出?或者是其他东西?如果出现其他错误,您希望做什么?如果接收方确实处于“慢速”状态并且消息正在到达那里,但速度非常慢(例如,有人用慢得多的链接替换了快速链接),您希望发生什么?
-
你能提供一些代码吗?
-
DOS 攻击通常是“大量流量”,而不是“无流量”,这就是超时...
-
我在上面编辑了我的问题!很抱歉第一次不够清楚..
-
@MatsPetersson 是的,你是对的!但我想到的攻击类型是当我等待 recv() 时,我应该在逻辑上获取更多数据,因为到目前为止的请求是不完整的,攻击者只是坐在那里不发送任何数据。
标签: c++ c sockets network-programming tcpsocket