Мультиплексирование ввода/вывода в сокетах
Написал такой кусочек кода:
struct pollfd fds[1];
fds[0].fd = intf->fd;
fds[0].events = POLLIN|POLLOUT;
rc = poll(fds, 1, timeout);
// произошло событие
if(rc > 0){
if(fds[0].revents&(POLLERR|POLLHUP)){
rc = ErrorHandling;
}
else if(fds[0].revents&POLLIN){
// прием данных
if((intf->RXBufCSize == 0) || (intf->RXBufCSize < BufCap)){
rc = Receiving;
}
else{
rc = WaitingIO;
}
}
else if(fds[0].revents&(POLLOUT)){
// передача данных
if(intf->TXBufCSize > 0){
rc = Transmiting;
}
else{
rc = WaitingIO;
}
}
}
else{
// таймаут вышел
if(rc == 0){
rc = WaitingIO;
}
else{
rc = ErrorHandling;
}
}
При разрыве соединения не возникает события POLLHUP, узнать о нем я могу только с помощью 0 который возвращает функция recv(). А так хочется с помощью poll() узнавать о разрыве. В чем может быть проблема?