Я пытаюсь создать итеративный сервер на основе сокетов датаграмм (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
}
РЕДАКТИРОВАТЬ: я обнаружил ошибку в моем клиенте, случайно отправившем пустой пакет. Теперь моя проблема в том, как заставить клиента ждать обслуживания вместо отправки запроса в никуда (сервер подключен к другому клиенту и еще не обслуживает других клиентов).