使用select正确处理EOF的str_cli函数
Posted soldierback
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用select正确处理EOF的str_cli函数相关的知识,希望对你有一定的参考价值。
void str_cli(FILE *fp, int sockfd) { int maxfdp1, stdineof; fd_set rset; char buf[MAXLINE]; int n; stdineof = 0; FD_SET(&rset); for ( ; ; ) { if (stdineof == 0) { FD_SET(fileno(fp), &rset); } FD_SET(sockfd, &rset); maxfdp1 = max(fileno(fp), sockfd) + 1; select(maxfdp1, &rset, NULL, NULL, NULL); if (FD_ISSET(sockfd, *rset)) { /* socket is readable */ if ( (n = read(sockfd, recvline, MAXLINE)) == 0) { if (stdineof == 1) { return; } else { exit(1); } } write(fileno(stdout), buf, n); } if (FD_ISSET(fileno(fp), &rset)) { /* inout is readable */ if ( (n = read(fileno(fp), buf, MAXLINE)) == 0) { stdineof = 1; shutdown(sockfd, SHUT_WR); /* send FIN */ FD_CLR(fileno(fp), &rset); continue; } writen(sockfd, buf, n); } } }
以上是关于使用select正确处理EOF的str_cli函数的主要内容,如果未能解决你的问题,请参考以下文章
[Hive]Hive使用union all报错missing EOF 解决方案