gpt4 book ai didi

c - 利布夫 : SO_REUSEPORT issue in Linux

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:56 24 4
gpt4 key购买 nike

我有一个基于 libuv 的 C 语言 UDP 服务器,我们有一个:

  • Main Thread:接收一个 UDP 数据包,将其排入 4 个队列之一,并调用对 4 个 worker 之一的出队回调。主线程是bind()到9930端口
  • 4 个工作线程:在回调调用时从相应队列中出队并发回响应。每个线程也绑定(bind)到相同的地址

现在,当我向 UDP 服务器发送请求(src_port:Adest_port:9930)时,服务器以带有 src_port 的 UDP 数据包响应: Bdest_port:A。我希望 B 等于 9930。

我浏览了一些在线文章并在 uv_udp_bind() 中为主线程和 4 工作线程设置了 UV_UDP_REUSEADDR 标志。但是,现在 udp 服务器并不总是接受请求,甚至没有调用接收回调。有时它确实如此,对于这些情况,端口 B=9930 的流程是正确的。

最佳答案

Now, when i send request (src_port:A and dest_port:9930) to the UDP server , the server responds with a UDP packet with src_port:B and dest_port:A. I want B to be equal to 9930.

然后服务器必须从绑定(bind)到端口 9930 的套接字进行响应。例如。从收到请求的同一个套接字做出响应。

此外,工作线程可以共享主线程打开的同一个套接字。当多个线程在同一个 UDP 套接字上接收时,只有其中一个获取数据报。多个线程在同一个 UDP 套接字上发送也是安全的。

关于c - 利布夫 : SO_REUSEPORT issue in Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32273181/

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