Первым аргументом для выбора должен быть дескриптор файла с наибольшим номером в любом из трех наборов плюс 1:
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
Также:
if(FD_ISSET(filePointer,&exceptfds))
{
printf("i have data\n");
}
Должно быть:
if(FD_ISSET(filePointer,&fd))
{
printf("i have data\n");
}
Вы должны проверить код возврата из select ().
Вам также необходимо сбрасывать наборы fdsets при каждом вызове select ().
Вам не нужен тайм-аут, поскольку вы его не используете.
Edit:
По-видимому, в Windows nfds игнорируется, но, вероятно, должен быть установлен правильно, просто чтобы код был более переносимым.
Если вы хотите использовать тайм-аут, вам нужно передать его в вызов select как последний аргумент:
// Reset fd, exceptfds, and timeout before each select()...
int result = select(maxFDPlusOne, &fd, NULL, &exceptfds, &timeout);
if (result == 0)
{
// timeout
}
else if (result < 0)
{
// error
}
else
{
// something happened
if (FD_ISSET(filePointer,&fd))
{
// Need to read the data, otherwise you'll get notified each time.
}
}