首先,请看这个问题来了解我所提到的。
当我尝试套接字在Windows操作系统与UDP不可达IP,我得到了三秒的延迟。
从结果中可以看出,Windows操作系统有三秒的延迟。 但是Ubuntu没有延迟,即与Windows操作系统有关的问题。 如何减less三秒延迟到零?
无法到达的IP(使用UDP)的Windows套接字closures时间:3秒
Ubuntu无法访问的IP地址closures时间(与UDP):0秒
提前致谢…
这里有一个愚蠢的例子,从.NET文档采取无连接协议,并使用connect(),以便它可以像疯了一样阻止,几乎可以肯定等待几秒钟到最后的stream浪ICMP无法到达:
https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.udpclient?view=netframework-4.7
这是你的答案,在Windows中做什么来摆脱这个UDP套接字快速:
(恕我直言,如果它尊重什么UDP试图完成它将使用asynchronoussend / recv,将Linger设置为false ,并为好措施设置发送和接收超时到less量毫秒,即使他们应该不重要…然后只是自行终止而不清理…)
认真地说,这是MSDN详细说明如何工作:
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方法(而不是在closures之前处理windows 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
无论如何,你真的不需要closures你的UDP套接字。 成为一个懒汉
https://stackoverflow.com/questions/19819927/when-to-close-a-udp-socket?rq=1
至lesssetsocketopt()重用,如果你以后需要它(例如,在一个循环中)。
closures与closures(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