gpt4 book ai didi

sockets - 每个人都必须同意 SO_REUSEADDR 吗?

转载 作者:可可西里 更新时间:2023-11-01 02:45:00 24 4
gpt4 key购买 nike

我在 SO_REUSEADDR 上看到的所有讨论都假定它是同一个程序在已知端口上创建和绑定(bind)到 TCP 套接字。

我有两个不同的程序使用同一个端口,我很好奇这个机制是如何工作的——为了让程序 2 分配一个端口程序 1 刚刚关闭,他们都必须指定 SO_REUSEADDR 在他们创建套接字之后?

或者其中一个就够了吗?如果是这样,当套接字处于 TIME_WAIT 状态时,是先占用套接字还是尝试打开套接字?

这里有一个 Python 的小例子,希望能使情况更清楚;

# one.py
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("", 5050)) # Assuming 5050 is available
sys.exit(1) # Assuming s enters TIME_WAIT

# two.py
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("", 5050))
s.listen()

将 one.py 和 two.py 视为两个独立的代码库。

one.py 和 two.py 是否都需要设置 SO_REUSEADDR 套接字选项,以便 two.py 能够容忍来自 one.py 的挥之不去的 TIME_WAIT 套接字?

谢谢。

最佳答案

回答你的问题。我相信 在 Linux 上 你必须在想要重用端口的程序中指定 SO_REUSEADDR ONLY。很简单。然而,在 Microsoft Windows 上,情况就不同了。微软有 a page on MSDN涵盖 SO_REUSEADDR 和相关功能。

关于sockets - 每个人都必须同意 SO_REUSEADDR 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8506971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com