Привет All!
У меня возникла одна непонятная для меня совершенно проблема... Функция select почему-то отказывается принимать нормально запрос от клиента на слушающий сокет, вернее не срабатывает на событие коннекта. Объясню подробнее:
Мне надо слушать 2 порта на приложении - сервер. Первый клиент будет конектиться на порт 3001 а второй на порт 3002 (vmctrl). Я пишу следующий код:
listener_for_client = vm_listenersock(true,3001);
listener_for_vmctrl = vm_listenersock(true,3002);
Функция vm_listenersock открывает неблокирующий сокет с указанным ей слушающим портом.
Далее выкладываю код цикла обработки:
set<int> clients;
clients.clear();
while(1)
{
//Заполняем множество сокетов
fd_set readset;
FD_ZERO(&readset);
FD_SET(listener_for_vmctrl, &readset);
FD_SET(listener_for_client, &readset);
//Ждем события в одном из сокетов
mx = max(listener_for_vmctrl, *max_element(clients.begin(), clients.end()));
select(mx+1, &readset, NULL, NULL, NULL);
if(FD_ISSET(listener_for_vmctrl, &readset))
{
printf ("I recive connection from vmctrl...\n");
sock_vmctrl = accept(listener_for_client, NULL, NULL);
if (sock_vmctrl < 0)
{
perror("accept");
exit(3);
}
clients.insert(sock_vmctrl);
}
if(FD_ISSET(listener_for_client, &readset))
{
printf ("I recive connection from client...\n");
sock_client = accept(listener_for_client, NULL, NULL);
if (sock_client < 0)
{
perror("accept");
exit(3);
}
clients.insert(sock_client);
}
}
И вот в чем сам фокус!! Если я в инструкции
mx = max(listener_for_vmctrl, *max_element(clients.begin(), clients.end()));
меняю listener_for_vmctrl на listener_for_client, то select на коннекты vmctrl вообще не реагирует НИКАК, однако client она ловит отлично... 100% проверено что оба коннектятся одинаково и не в них дело.. Что за нафиг творится в моем коде? Подскажите, кто знает... И еще, у меня встречалась точно такая же ошибка, когда я переносил код на другой линух. Причем слушал только один порт клиента. select наотрез отказывалась срабатывать на коннекты от клиента, однако перенеся этот же код на gentoo все вновь заработало.. В чем волшебство??? HELP!!!