Nit*_*amk 5 c++ sockets windows timeout tcp
我正在使用的软件需要能够在短时间内使用TCP/IP连接到许多服务器.该软件在Win32下运行.如果服务器没有响应,我希望能够快速继续列表中的下一个服务器.
有时当远程服务器没有响应时,我在大约20秒后收到连接超时错误.超时通常会更快.
我的问题是,这20秒会损害我的软件性能,我希望我的软件能够更快地放弃(比如5秒后).我假设Windows中的TCP/IP堆栈(?)会根据某些参数自动调整超时?
在我的应用程序中覆盖此超时是否合理,如果我在X秒内无法连接,请关闭套接字?
(它可能不相关,但应用程序是使用C++构建的,并使用I/O完成端口进行异步网络通信)
在 Linux 上你可以
int syncnt = 1;
int syncnt_sz = sizeof(syncnt);
setsockopt(sockfd, IPPROTO_TCP, TCP_SYNCNT, &syncnt, syncnt_sz);
Run Code Online (Sandbox Code Playgroud)
减少(或增加)每个套接字每个连接的 SYN 重试次数。不幸的是,它不能移植到 Windows。
至于您提出的解决方案:在套接字仍处于连接状态时关闭套接字应该没问题,这可能是最简单的方法。但是,既然听起来您已经在使用异步完成,那么您是否可以尝试一次打开四个连接?如果四次都超时的话,至少只需要20秒,而不是80秒。
| 归档时间: |
|
| 查看次数: |
5607 次 |
| 最近记录: |