SO_REUSEADDR 对服务器有意义吗?

发布于 2025-01-11 05:56:33 字数 891 浏览 0 评论 0原文

我正在使用两个使用 UDP 套接字的二进制文件。进程 A 通过 select() 在 UDP 套接字 (IP_1:PORT_1) 上等待消息,进程 B 最终通过 UDP 套接字发送消息。

由于某些超出范围的限制,进程 B 需要通过 (IP_1:PORT_1) 上的套接字发送。由于这两个进程的 IP:PORT 对相同,因此无法使用 bind()。我尝试了 SO_REUSEADDR,但是我想知道将 IP:PORT 与 SO_REUSEADDR 一起用于发送和接收是否有意义,或者这个选项只是为了监听套接字而设计的?

进程 A

int nOptVal = 1;
setsockopt(UDPSocket, SOL_SOCKET, SO_REUSEADDR, &nOptVal, sizeof(nOptVal));
bind(UDPSocket, (struct sockaddr *)&addrLocal, sizeof(addrLocal));

select(fdMax+1, UDPSocket, NULL, NULL, NULL);

进程 B

int nOptVal = 1;
setsockopt(UDPSocket, SOL_SOCKET, SO_REUSEADDR, &nOptVal, sizeof(nOptVal));
bind(UDPSocket, (struct sockaddr *)&addrLocal, sizeof(addrLocal));

sendto(UDPSocket, buff, len, 0, (struct sockaddr *)&addrDest, sizeof(struct sockaddr));

I am working with two binaries which use UDP sockets. Process A waits for messages on a UDP socket (IP_1:PORT_1) by select(), and process B eventually sends through an UDP socket.

By some constraints out of scope, process B needs to send by a socket on (IP_1:PORT_1). Since this is the same IP:PORT pair for both processes, it is not possible to use bind(). I tried SO_REUSEADDR, but I am wondering if reusing the IP:PORT with SO_REUSEADDR for sending and receiving makes sense, or was this option conceived just for listening sockets?

process A

int nOptVal = 1;
setsockopt(UDPSocket, SOL_SOCKET, SO_REUSEADDR, &nOptVal, sizeof(nOptVal));
bind(UDPSocket, (struct sockaddr *)&addrLocal, sizeof(addrLocal));

select(fdMax+1, UDPSocket, NULL, NULL, NULL);

process B

int nOptVal = 1;
setsockopt(UDPSocket, SOL_SOCKET, SO_REUSEADDR, &nOptVal, sizeof(nOptVal));
bind(UDPSocket, (struct sockaddr *)&addrLocal, sizeof(addrLocal));

sendto(UDPSocket, buff, len, 0, (struct sockaddr *)&addrDest, sizeof(struct sockaddr));

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文