如何修改 Windows 上无法访问 IP 的套接字关闭时间?

如何修改 Windows 上无法访问 IP 的套接字关闭时间?

首先,请看这个问题理解我所提到的内容。

当我尝试在 Windows 操作系统中通过 UDP 关闭无法访问的 IP 的套接字时,出现了三秒的延迟。

从结果中可以看出,Windows 操作系统有三秒的延迟。但 Ubuntu 没有延迟,也就是说问题与 Windows 操作系统有关。如何将三秒的延迟减少为零?

Windows 无法访问 IP 的套接字关闭时间(使用 UDP):3 秒
Ubuntu 无法访问 IP 的套接字关闭时间(使用 UDP):0 秒

提前致谢...

答案1

这是一个愚蠢的例子。网文档采用无连接协议并使用 connect(),这样它就可以疯狂地阻塞,并且几乎肯定会在最后等待几秒钟,等待 ICMP 不可达或许到达:
https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.udpclient?view=netframework-4.7

这是关于在 Windows 中如何快速退出该 UDP 套接字的答案:
(恕我直言,如果尊敬UDP 试图实现的功能是使用异步发送/接收,将 Linger 设置为false,并将发送和接收超时设置为较小的毫秒数(尽管它们并不重要)...然后直接终止而不进行清理...)
说真的,这是微软详细说明其工作原理:
https://stackoverflow.com/questions/4160347/close-vs-shutdown-socket?rq=1

这篇文章讨论了将句柄设置为非阻塞的重要性(在 Windows 中 SOCK_STREAM 默认阻塞)。
https://stackoverflow.com/questions/17058224/concept-of-non-blocking-socket-functions-using-wsawaitformultipleevents?rq=1

这是一种更便携的方法(而不是处理窗口setsocketopt() or similar- poll()或者select()在关机之前)
https://stackoverflow.com/questions/16163260/setting-timeout-for-recv-fcn-of-a-udp-socket?rq=1

以下是Python提醒我们,如果你发送 UDP,你不应该期望任何返回。同时解释错误:
https://stackoverflow.com/questions/34242622/windows-udp-sockets-recvfrom-fails-with-error-10054?rq=1

你真的如果你要离开,就需要关闭你的 UDP 套接字。做个懒汉。
https://stackoverflow.com/questions/19819927/when-to-close-a-udp-socket?rq=1
至少可以重复使用 setsocketopt() 以防您以后需要它(比如,在循环中)。

如果您仍然不相信的话,请参考 Close 与 Shutdown (TCP,主要):
https://stackoverflow.com/questions/4160347/close-vs-shutdown-socket?rq=1

以下是您应该自己清理的一些原因:
https://stackoverflow.com/questions/12776563/what-is-the-drawback-if-i-do-not-invoke-the-udpclient-close-method

相关内容