server.c
-> всегда ПРИЕМ данные клиента (используйте опрос(), чтобы подтвердить, произошла ли ошибка)когда делает опрос() возвращает POLLERR
client.c
-> всегда посылают данные на сервер
Я EXEC server.c
и client.c
, то я стараюсь, чтобы убить client.c
процесс.
Но флаг POLLERR никогда не будет установлена.
страница людей только сказать
POLLERR состояние ошибки (только выход)
Когда же Poll() обратный POLLERR?
Что я пропустил?
Спасибо.
server.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/poll.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <errno.h>
int main()
{
int rc = 0;
char str[100];
char test[5];
int listen_fd, comm_fd;
struct sockaddr_in servaddr;
struct pollfd fds[200];
listen_fd = socket(AF_INET, SOCK_STREAM, 0);
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htons(INADDR_ANY);
servaddr.sin_port = htons(22000);
bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));
listen(listen_fd, 10);
comm_fd = accept(listen_fd, (struct sockaddr*) NULL, NULL);
fds[0].fd = comm_fd;
fds[0].events = POLLIN | POLLOUT | POLLERR | POLLHUP;
printf("start\n");
while(1) {
rc = poll(fds,1,1000);
if (rc < 0)
printf("failed\n");
else if(rc==0)
printf("timeout\n");
else {
if (fds[0].revents & POLLERR){
printf("Error!!\n");
}
if(fds[0].revents & POLLHUP){
printf("handup!!\n");
break;
}
if (fds[0].revents & POLLIN){
int bl = recv(comm_fd,test,4,0);
printf("recv:%s %d\n",test,bl);
}
}
sleep(1);
}
return 0;
}
client.c
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
int main(int argc,char **argv)
{
int sockfd,n;
char sendline[100];
char recvline[100];
struct sockaddr_in servaddr;
sockfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof servaddr);
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(22000);
inet_pton(AF_INET,"127.0.0.1",&(servaddr.sin_addr));
connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
while(1){
send(sockfd,"test",4,0);
sleep(5);
}
close(sockfd);
return 0;
}
Возможный дубликат [C++ linux socket revents POLLERR POLLHUP POLLNVAL] (http://stackoverflow.com/questions/24791625/c-linux-socket-handling-revents-pollerr-pollhup-pollnval) – LPs