Tom*_*Tom 0 c sockets networking tcp polling
server.c-> 总是接收客户端数据(使用 poll() 确认是否发生错误\xef\xbc\x89
client.c-> 总是向服务器发送数据
我执行server.c,client.c然后我尝试终止client.c进程。
但 POLLERR 标志永远不会被设置。
\n\n手册页只说
\n\n\n\n\nPOLLERR 错误条件(仅输出)
\n
Poll() 什么时候返回 POLLERR?
\n\n我错过了什么?
\n\n谢谢。
\n\n服务器.c
\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/poll.h>\n#include <sys/socket.h>\n#include <sys/time.h>\n#include <netinet/in.h>\n#include <errno.h>\n\nint main()\n{\n int rc = 0;\n char str[100];\n char test[5];\n int listen_fd, comm_fd;\n struct sockaddr_in servaddr;\n struct pollfd fds[200];\n listen_fd = socket(AF_INET, SOCK_STREAM, 0);\n\n servaddr.sin_family = AF_INET;\n servaddr.sin_addr.s_addr = htons(INADDR_ANY);\n servaddr.sin_port = htons(22000);\n\n bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));\n listen(listen_fd, 10);\n comm_fd = accept(listen_fd, (struct sockaddr*) NULL, NULL);\n fds[0].fd = comm_fd;\n fds[0].events = POLLIN | POLLOUT | POLLERR | POLLHUP;\n printf("start\\n");\n\n while(1) {\n rc = poll(fds,1,1000);\n if (rc < 0)\n printf("failed\\n");\n else if(rc==0)\n printf("timeout\\n");\n else {\n if (fds[0].revents & POLLERR){\n printf("Error!!\\n");\n }\n\n\n if(fds[0].revents & POLLHUP){\n printf("handup!!\\n");\n break;\n }\n\n if (fds[0].revents & POLLIN){\n int bl = recv(comm_fd,test,4,0);\n printf("recv:%s %d\\n",test,bl);\n }\n }\n sleep(1);\n\n }\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n客户端.c
\n\n#include <sys/types.h>\n#include <sys/socket.h>\n#include <netdb.h>\n#include <stdio.h>\n#include <string.h>\n\nint main(int argc,char **argv)\n{\n int sockfd,n;\n char sendline[100];\n char recvline[100];\n struct sockaddr_in servaddr;\n\n sockfd=socket(AF_INET,SOCK_STREAM,0);\n bzero(&servaddr,sizeof servaddr);\n\n servaddr.sin_family=AF_INET;\n servaddr.sin_port=htons(22000);\n\n inet_pton(AF_INET,"127.0.0.1",&(servaddr.sin_addr));\n\n connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));\n while(1){\n send(sockfd,"test",4,0); \n sleep(5);\n } \n close(sockfd);\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3108 次 |
| 最近记录: |