Iam尝试基于数据报套接字(UDP)创建迭代服务器。 它调用连接到它从第一个recvfrom()调用获得的第一个客户端(是的,我知道这不是真正的连接)。 服务此客户端后,我断开UDP套接字(调用连接AF_UNSPEC) 然后我调用recvfrom()从下一个客户端获取第一个数据包。断开并重新连接已连接的数据报套接字
现在的问题是,在循环的第二个迭代recvfrom()的调用返回0.我的客户端永远不会发送空数据包,所以会发生什么。
这是什么做的IAM(伪):
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
}
编辑:我找到的bug在我的客户不小心发送一个空包。 现在我的问题是如何让客户端等待得到服务,而不是发送请求到任何地方(服务器连接到另一个客户端,并且不提供任何其他客户端)。
Connect使用send()或recv()函数设置一个内部过滤器,从中接收和发送地址。 recv():“对于SOCK_DGRAM套接字,从连接调用中指定的目标地址的第一个排队数据报中提取数据”。 – codymanix 2009-05-26 16:30:07
你是对的,我的客户正在发送(由于错误)一个空包。现在我有另一个问题。应该在队列中等待获得服务的客户端发送其第一个请求数据包(从未从服务器接收数据包)。然后它尝试接收响应,并且recv返回-1。我如何让客户等待? – codymanix 2009-05-26 21:15:03