连接的Upd套接字未监听传入的数据包

时间:2019-09-05 21:57:20

标签: c windows sockets networking udp

我创建udp套接字以等待传入的数据包,当接收到任何数据包时-创建新的套接字,绑定到相同的地址并连接到客户端地址(来自recvfrom)。

我可以将数据发送到此套接字(客户端获取数据包),但是当客户端发送数据包时,此“已连接”套接字未获取任何数据包,但第一个套接字获取了任何数据包。

相同的代码在Unix上运行良好。

auto masterSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
setsockopt(masterSocket , SOL_SOCKET, SO_REUSEADDR, /* 1 */);
bind(masterSocket, {INADDR_ANY, 30000});

while (true) {
    recvfrom(masterSocket, /* address */);

    auto clientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    setsockopt(clientSocket , SOL_SOCKET, SO_REUSEADDR, /* 1 */);
    bind(clientSocket, {INADDR_ANY, 30000});
    connect(clientSocket, /* address from recvfrom */);

    send(clientSocket, /* some data */); // this works well, data is delivered to the client
    int res = recv(clientSocket, /* buff */); // this stucks on windows, but returns on linux
    int res = recvfrom(masterSocket, /* buff */); // this works on both windows and linux
}

这是伪代码,如果需要,我可以同时发送客户端和服务器源。 但是问题在于该程序可以在linux上按预期工作,但是在Windows“连接”的udp套接字上却没有收到传入的数据包...

0 个答案:

没有答案