Доброго времени суток!
Столкнулся с проблемой поставившей в тупик. Имеется код, следующего вида:
SocketState CheckData(SOCKET s)
{
fd_set read_fd, error_fd, write_fd;
timeval timeout;
if (s == INVALID_SOCKET)
return SocketError;
timeout.tv_sec = 0;
timeout.tv_usec = 0;
FD_ZERO(&read_fd);
FD_ZERO(&error_fd);
FD_ZERO(&write_fd);
FD_SET(s, &read_fd);
FD_SET(s, &error_fd);
FD_SET(s, &write_fd);
switch (select(1, &read_fd, &write_fd, &error_fd, &timeout))
{
case 0:
return NoData;
break;
case SOCKET_ERROR:
TDLog.Write("Select Error: %d", GetLastError());
return SocketError;
break;
default:
if (FD_ISSET(s, &error_fd))
{
return SocketError;
}
else if (FD_ISSET(s, &read_fd))
{
return HasData;
}
break;
}
return SocketError;
}
select всё время возвращает ошибку, после GetLastError получаю WSAENOTSOCK. При этом, если попробовать прочитать данные из этого сокета, они читаются. Если кто-то подскажет, в чём может быть причина и куда мне копать, я буду крайне благодарен. Сам ничего нарыть не смог, к сожалению=(
MS Visual Studio 2012
27.06.13 13:58: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Проблема решена. Дело, естественно, оказалось в кривых руках=)