socket connect超时问题,咋就解决不了呢,这么多大牛呢,进来看下了,进着有分

vqt2prt24 2012-04-01 12:01:32
http://topic.csdn.net/u/20120401/09/d7d3b75a-6929-4bfb-8dac-f38e627a5d86.html?12622
上个帖子地址,没解决,再发了,
号威力小,只能给100分了

我在网上查的connect的默认超时是75秒,send recv都可以自己代码去试验,
这个咋用代码去实现超时,看到connect停在那75秒 ???

在阻塞模式下
服务器端如果让Sleep(60000)在listen前面
客户端马上就显示连接失败
如果让Sleep(60000)在listen后面
客户端就显示连接成功

是不是可以在非阻塞模式下实现???
客户端设置非阻塞,用select对connect设置超时时间??
服务器端咋做让它会有延时??
...全文
398 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vqt2prt24 2012-04-01
  • 打赏
  • 举报
回复
自个顶下
vqt2prt24 2012-04-01
  • 打赏
  • 举报
回复
再问下,防火墙要怎么设置
www_adintr_com 2012-04-01
  • 打赏
  • 举报
回复
这个你要理解一下 TCP 协议的实现, 还有哪些东西是你程序里面写的,哪些东西是操作系统内核实现的。

TCP 建立连接有 3 次握手的过程,客户端连接的时候发出一个第一个包后可能产生的情况:
1. 目的主机关机,包无法到达,但是目的主机的前端路由知道这个情况,于是路由器会返回一个 ICMP 报来报告目的主机无法到达的错误,源主机收到后 connect 立即返回失败。
2. 目的主机不在线,也没有路由器检测到这个情况,或者其它不管什么原因,总之就是这个包没有任何回应,则源主机会在一段时间后重发这个建立连接的包,如果多次重发仍无响应,则返回超时。
3. 目的主机在线,但是端口没有打开(没有 listen),则目的主机会向源主机返回一个 ICMP 包提示错误。源主机的 connect 立即返回失败。
4. 目的主机在线,端口已经打开(开始 listen),则目的主机会向源主机发送建立 TCP 连接的第二个包,源主机收到后再次确认后连接成功。源主机的 connect 返回成功。目的主机将建立的连接保存在缓存中,直到应用程序调用 accept 再将其返回给应用程序。

根据以上说明,建立 TCP 连接的过程是由操作系统和路由器来完成的,你的应用程序只是告诉操作系统是否允许在某个端口上建立连接,所以不管你的服务器端应用程序如何 Sleep,是不会影响到连接的建立的。

如果要模拟连接超时,你需要使用防火墙,配置你想要超时的那个目标为 DROP(丢弃)。如果设置成 REJECT 的话客户端仍然可以收到失败的。
vqt2prt23 2012-04-01
  • 打赏
  • 举报
回复
行,我试下a,明天给你分
www_adintr_com 2012-04-01
  • 打赏
  • 举报
回复
linux 下搜索 iptables, windows 下搜索 IPSec组策略

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧