python - 为什么在我可以重用打开的端口之前会有时间延迟?
问题描述
当我在 python 中使用套接字进行一些编程时
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen()
s.settimeout(0.1)
在退出问题之前不关闭套接字,端口将在短时间内不可用。
我了解我应该在程序退出或关闭之前正确关闭套接字。但是,在开发过程中,有时程序会在我处理套接字之前崩溃/退出。
为什么在我可以再次重用端口之前会有时间延迟?以及如何避免此类问题?
解决方案
这是因为 TCP 的工作方式。从内存中,连接状态是 TIME WAIT 状态。
它的目的是防止延迟的数据包到达后面的流。
打开套接字时设置 SO_REUSEADDR 选项可以解决此问题。在此处查看答案: Python:绑定套接字:“地址已在使用中”
推荐阅读
- amazon-web-services - 如何使用 AWS Step Functions 将失败任务的输入和错误传递给回退任务?
- python-3.6 - 特定范围内的 n 个数字的总和
- vb.net - 带通配符的 IndexOf
- c# - 运行架构合并时未定义接口 Microsoft.IDialog
- amazon-web-services - AWS Beanstalk 在不发送数据时替换实例
- c# - Linq.Dynamic.Core 因 DateTime 条件而失败
- mongodb - 减少文档后mongodb索引没有减少
- c - C - 为什么 puts 的行为出乎意料,但 printf 在使用 scanf 时却没有?
- python - 所以我做了一个线性搜索代码,但是当我在数组中输入一个数字时,它仍然会打印(数字没有)为什么会这样?
- python - 在 Pandas Python 上转置