我正在向thekogans stream库添加客户端/服务器UDP支持,并在Windows上遇到问题 . 这就是我在做的事情;
-
服务器udp套接字绑定到0.0.0.0:8854 .
-
服务器udp套接字具有IP_PKTINFO = true .
-
服务器udp套接字有SO_REUSEADDR = true .
-
server udp socket启动重叠的WSARecvMsg操作 .
-
client绑定到0.0.0.0:0并连接到127.0.0.1:8854 .
-
客户端使用WSASend发送消息 .
-
服务器套接字接收消息并创建具有以下属性的新UDP套接字:
-
SO_REUSEADDR = true
-
绑定到IP_PKTINFO(127.0.0.1:8854)返回的地址 .
-
连接到WSARecvMsg返回的任何地址 .
-
客户端和新服务器UDP套接字交换一堆消息(使用WSASend和WSARecv) .
这是我看到的行为:
-
客户端和服务器之间的第一个连接完美无缺 .
-
然后我让客户端退出并重新启动 .
-
来自客户端的所有其他数据包都被丢弃 .
-
如果我在新服务器UDP套接字(127.0.0.1:8854)上设置超时并且超时并关闭,则客户端可以再次连接 . 换句话说,该计划似乎有效但一次只有一个客户 . 如果服务器具有为同一端口创建的具体(非通配符)套接字,则没有其他客户端可以向其发送消息 .
一些可能有用的信息:服务器是异步的并使用IOCP . 这段代码(使用epoll和kqueue)在Linux和OS X上完美运行 . 我觉得我在某个地方缺少一些winsock需要设置的标志,但我似乎无法找到它 . 我尝试使用谷歌搜索各种搜索术语,但已经碰壁了 .
任何和所有的帮助将不胜感激 . 谢谢 .