我正在尝试创建一个基于数据报套接字(UDP)的迭代服务器。它调用连接到它从第一个 recvfrom() 调用获得的第一个客户端(是的,我知道这不是真正的连接)。在为这个客户端提供服务后,我断开 UDP 套接字(使用 AF_UNSPEC 调用连接)然后我调用 recvfrom() 从下一个客户端获取第一个数据包。
现在的问题是,在循环的第二次迭代中调用 recvfrom() 将返回 0。我的客户端从不发送空数据包,所以会发生什么。
这就是我正在做的事情(伪代码):
s = socket(PF_INET, SOCK_DGRAM, 0)
bind(s)
for(;;)
{
recvfrom(s, header, &client_address) // get first packet from client
connect(s,client_address) // connect to this client
serve_client(s);
connect(s, AF_UNSPEC); // disconnect, ready to serve next client
}
编辑:我发现我的客户端错误地发送了一个空包。现在我的问题是如何让客户端等待获得服务而不是向任何地方发送请求(服务器连接到另一个客户端并且不为任何其他客户端提供服务)。