Здраствуйте. Я новичок в сетевом программировании и у меня возник такой трабл: почему ф-ция poll не можте отследить разрыв канала, а вместо этого определяет поступления новых данных на сокет(тобишь POLLIN)
struct pollfd fds[1];
int main(void)
{
struct sockaddr_in addr;
int value=1;int cl=1,result,k,addr_len=sizeof(addr),sd;
char buffer[256];
int bytes;
sd = socket(PF_INET, SOCK_STREAM, 0);
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = INADDR_ANY;
if ( bind(sd, (struct sockaddr *)&addr, sizeof(addr)) == 0 )
{
listen(sd,5);
fds[0].fd=accept(sd,0,0);
fds[0].events=POLLIN;
for (;;)
{
if ( (result = poll(fds, 1, 500)) > 0 )
{ int i;
if ((fds[0].revents & POLLHUP)==POLLHUP)
{
close(fds[0].fd);
bzero(&fds[0], sizeof(fds[0]));
}
if ( (fds[0].revents & POLLIN)==POLLIN )
{
if(recv(fds[0].fd, buffer, sizeof(buffer), 0)>0)
{
puts(buffer);
if((fds[0].revents & POLLOUT)==POLLOUT) send(fds[0].fd, buffer, bytes, 0);
}
}
}
else if ( result < 0 )
{perror("poll() error");exit(0);}
}
}
return 0;
}
Это простой эхо-сервер. Почему он не работает как нада при разрыве соединения??