Re[2]: Некоторые вопросы касательно сокетов....
От: Аноним  
Дата: 05.01.07 22:36
Оценка:
Здравствуйте, Forgotten, Вы писали:

F>Еще хотелось бы узнать кое-что.

F>Задача в следующем. Как заставить сервер все время ожидать подключения? То есть допустим клиент подключился, потом отключился а сервер продолжает ждать. Есть совершенно обычный код с последовательными вызовами socket() bind() listen() accept() close(). Вроде все работает. Но когда я все это пытаюсь запустить в цикле, начинаются ошибки. В частности на бинде после завершения одного витка цикла 10048 WSAEADDRINUSE. Видимо происходит от того, что неверно освобождается хендл сокета. Подскажите пожалуйста как вообще правильно это можно реализовать, чтобы сервер продолжал быть работоспособным после разрыва связи с клиентом. Или где про это можно почитать. Заранее спасибо.

Это все не нужно запускать в цикле. Последовательность socket() bind() listen() вызываешь один раз при старте сервера, а потом в цикле вызываешь accept(). псевдокод:


SOCKET listener = socket();
bind(listenner);
listen(listener);

for (;;)
{
    SOCKET client = accept(listener);
    if (client != INVALID_SOCKET)
    {
         clients_queue.add(client);
    }
    else
    {
         err = WSAGetLastError();
         break;
    }
}

closesocket(listener);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.