【发布时间】:2015-08-28 14:16:35
【问题描述】:
我有一个基于 libuv 的 C UDP 服务器,我们有一个:
-
主线程:接收 UDP 数据包并将其排入 4 个队列之一,并调用 4 个工作人员之一的出队回调。主线程是
bind()到9930端口 - 4 个工作线程:在回调调用时从相应队列中出列并发回响应。每个线程也绑定到同一个地址
现在,当我向 UDP 服务器发送请求(src_port:A 和 dest_port:9930)时,服务器以带有 src_port:B 和 dest_port:A 的 UDP 数据包响应。我希望 B 等于 9930。
我在网上浏览了一些文章,并在uv_udp_bind() 中为主线程和4 个工作线程设置了UV_UDP_REUSEADDR 标志。但是,现在 udp 服务器并不总是接受请求,甚至没有调用接收回调。有时确实如此,对于这些情况,端口B=9930 的流量是正确的。
【问题讨论】: