我可以创建具有相同端口号的多个套接字吗?
Can I create a multiple sockets with the same port number?
我读到两个 applications/processes 不能同时监听同一个端口。我想知道基于 unix 的系统是否只是“拒绝”创建新套接字并在 App2 请求与 App1 具有相同端口号的套接字时为套接字分配新内存(双工)。
它是像我怀疑的那样“拒绝”App2,还是继续创建新套接字并为 App2 分配所需的套接字内存。
如果它确实分配了新内存,那么它是如何阻止 App2 监听的。客户端如何知道哪个套接字接收服务器发送的信息,因为它们都使用相同的端口。如果可能的话,我需要一个冗长的解释,因为我很困惑。谢谢
I've read that two applications/processes cannot listen to the same port at the same time.
它们不能同时在同一网络接口 上的同一端口 上侦听,除非使用了SO_REUSEADDR
/SO_REUSEPORT
套接字选项。否则,它们可能会在不同的网络接口.
上侦听同一端口
So does it "deny" App2 like I suspect
是的,如果第二个应用无法将套接字绑定到指定的 interface/port。
,它将从 bind()
收到 EADDRINUSE
错误
or does it go ahead and create a new socket and allocate the required socket memory for App2 anyway
socket 将在 bind()
尝试之前创建,所以是的。套接字不会绑定到正在使用的端口。
If it does allocate new memory, then how does it prevent App2 from listening.
listen()
如果套接字未 bind()
连接到端口,
将失败。
我读到两个 applications/processes 不能同时监听同一个端口。我想知道基于 unix 的系统是否只是“拒绝”创建新套接字并在 App2 请求与 App1 具有相同端口号的套接字时为套接字分配新内存(双工)。
它是像我怀疑的那样“拒绝”App2,还是继续创建新套接字并为 App2 分配所需的套接字内存。
如果它确实分配了新内存,那么它是如何阻止 App2 监听的。客户端如何知道哪个套接字接收服务器发送的信息,因为它们都使用相同的端口。如果可能的话,我需要一个冗长的解释,因为我很困惑。谢谢
I've read that two applications/processes cannot listen to the same port at the same time.
它们不能同时在同一网络接口 上的同一端口 上侦听,除非使用了SO_REUSEADDR
/SO_REUSEPORT
套接字选项。否则,它们可能会在不同的网络接口.
So does it "deny" App2 like I suspect
是的,如果第二个应用无法将套接字绑定到指定的 interface/port。
,它将从bind()
收到 EADDRINUSE
错误
or does it go ahead and create a new socket and allocate the required socket memory for App2 anyway
socket 将在 bind()
尝试之前创建,所以是的。套接字不会绑定到正在使用的端口。
If it does allocate new memory, then how does it prevent App2 from listening.
listen()
如果套接字未 bind()
连接到端口,