从崩溃的程序中关闭打开的套接字

桃花心木

我打开了数千个套接字,有时程序崩溃了,给我留下了更少的可用套接字。有没有办法清洁那些悬挂的插座?

一世

套接字最终被Unix内核关闭;崩溃的程序与没有close()/shutdown()调用的正常程序退出没什么不同

您的问题可能与TCP / IP状态机的TIME_WAIT状态有关,应使用SO_REUSEADDR选项解决。一种确认方法是等待大约5分钟,然后在崩溃后再次开始。如果发现现在有足够的套接字可用,则应研究TIME_WAIT逻辑并加以解决。如果等待技巧不能解决您的问题,则程序中可能存在其他问题,需要确定该问题。

这是有关TIME_WAIT主题及其对协议和可伸缩客户端服务器系统的设计含义的很好的阅读

从中快速摘录两个,以供参考,

TIME_WAIT通常也称为2MSL等待状态。这是因为转换为TIME_WAIT的套接字在此停留的时间为持续时间的2 x最大段生存时间。MSL是任何段(出于所有目的和目的,构成TCP协议一部分的数据报)在被丢弃之前可以在网络上保持有效的最长时间。此时间限制最终受用于传输TCP段的IP数据报中的TTL字段限制。不同的实现为MSL选择不同的值,并且常见值为30秒,1分钟或2分钟。RFC 793将MSL指定为2分钟,Windows系统默认为该值,但可以使用TcpTimedWaitDelay注册表设置进行调整。

(附:因此,4+1等待上面建议的考试等待的时间)

更改2MSL延迟通常是整个计算机范围内的配置更改。您可以改为尝试使用SO_REUSEADDR套接字选项在套接字级别上解决TIME_WAIT。这允许在已经存在具有相同地址和端口的现有套接字的同时创建套接字。新的套接字实质上会劫持旧的套接字。您可以使用SO_REUSEADDR允许在具有相同端口的套​​接字已经在TIME_WAIT中的同时创建套接字,但这也会引起诸如拒绝服务攻击或数据盗窃之类的问题。

本文介绍了另一种方法。但这伴随着其他警告。

还有一种终止TCP连接的方法,即中止连接并发送RST而不是FIN。通常,这可以通过将SO_LINGER套接字选项设置为0来实现。这将导致丢弃待处理数据,并使用RST终止连接,而不是发送待处理数据,并使用FIN干净地关闭连接。重要的是要认识到,当连接中止时,对等点之间可能正在流动的任何数据都将被丢弃,而RST将被立即传递。通常是一个错误,表示“对等方已重置连接”这一事实。远程对等方知道连接已中止,并且任何对等方均未输入TIME_WAIT。

在使用这些方案之前,先了解一下TCP机器的行为是一个好主意,这样您就不会无意间引入其他情况,这些情况以后需要进行调试。所以至少要完整地阅读该文章:-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Python中打开SSL套接字连接

来自分类Dev

如何在python程序中的Ctrl-C上关闭套接字连接

来自分类Dev

如何正确关闭用fdopen打开的套接字?

来自分类Dev

在子进程中关闭打开的套接字

来自分类Dev

保持套接字打开以进行频繁的请求还是每次都关闭套接字更好?

来自分类Dev

linux套接字:在C中关闭套接字

来自分类Dev

套接字在Bluetooth聊天示例中过早关闭

来自分类Dev

R中的ZeroMQ,如何关闭套接字

来自分类Dev

getSession关闭套接字

来自分类Dev

TCP套接字连接是否适合连续打开/关闭套接字

来自分类Dev

Golang关闭后保持文件服务套接字打开

来自分类Dev

每当远程主机关闭套接字连接时,Node.js应用程序崩溃

来自分类Dev

在Swift中打开一个关闭的NSWindow会使应用程序崩溃

来自分类Dev

我不想在单服务器程序的多客户端中关闭套接字

来自分类Dev

尝试重新打开连接时出现套接字关闭错误

来自分类Dev

为什么线程中的python套接字无法始终正确关闭(即如果我连续多次运行该程序)

来自分类Dev

应用程序可立即打开和关闭,而不会崩溃

来自分类Dev

防止在父进程中打开的流套接字被子fork关闭

来自分类Dev

关闭网络套接字

来自分类Dev

在WinForms应用程序中关闭套接字服务器的正确方法?

来自分类Dev

套接字发送失败会导致守护程序崩溃吗?

来自分类Dev

getSession关闭套接字

来自分类Dev

C ++ Windows套接字-在程序退出时关闭套接字

来自分类Dev

套接字程序使计算机崩溃

来自分类Dev

无法在系统服务中打开套接字

来自分类Dev

节点因 https 中的套接字 io 崩溃

来自分类Dev

在 PHP 中关闭套接字

来自分类Dev

C中的套接字:关闭套接字的正确方法

来自分类Dev

如何关闭python中的套接字连接?

Related 相关文章

  1. 1

    在Python中打开SSL套接字连接

  2. 2

    如何在python程序中的Ctrl-C上关闭套接字连接

  3. 3

    如何正确关闭用fdopen打开的套接字?

  4. 4

    在子进程中关闭打开的套接字

  5. 5

    保持套接字打开以进行频繁的请求还是每次都关闭套接字更好?

  6. 6

    linux套接字:在C中关闭套接字

  7. 7

    套接字在Bluetooth聊天示例中过早关闭

  8. 8

    R中的ZeroMQ,如何关闭套接字

  9. 9

    getSession关闭套接字

  10. 10

    TCP套接字连接是否适合连续打开/关闭套接字

  11. 11

    Golang关闭后保持文件服务套接字打开

  12. 12

    每当远程主机关闭套接字连接时,Node.js应用程序崩溃

  13. 13

    在Swift中打开一个关闭的NSWindow会使应用程序崩溃

  14. 14

    我不想在单服务器程序的多客户端中关闭套接字

  15. 15

    尝试重新打开连接时出现套接字关闭错误

  16. 16

    为什么线程中的python套接字无法始终正确关闭(即如果我连续多次运行该程序)

  17. 17

    应用程序可立即打开和关闭,而不会崩溃

  18. 18

    防止在父进程中打开的流套接字被子fork关闭

  19. 19

    关闭网络套接字

  20. 20

    在WinForms应用程序中关闭套接字服务器的正确方法?

  21. 21

    套接字发送失败会导致守护程序崩溃吗?

  22. 22

    getSession关闭套接字

  23. 23

    C ++ Windows套接字-在程序退出时关闭套接字

  24. 24

    套接字程序使计算机崩溃

  25. 25

    无法在系统服务中打开套接字

  26. 26

    节点因 https 中的套接字 io 崩溃

  27. 27

    在 PHP 中关闭套接字

  28. 28

    C中的套接字:关闭套接字的正确方法

  29. 29

    如何关闭python中的套接字连接?

热门标签

归档