UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
2013-02-25 08:56
405 查看
#include "unp.h" void str_cli(FILE *fp,int sockfd) { int maxfdp1,stdineof; fd_set rset; // char sendline[MAXLINE],recvline[MAXLINE]; char buf[MAXLINE]; int n; stdineof = 0; FD_ZERO(&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)) { if((n=Read(sockfd,buf,MAXLINE)) == 0)//注意此行,(n=Read(sockfd,buf,MAXLINE))外面括号不能少! { if(stdineof == 1) return; else err_quit("str_cli:server terminated prematurelly"); } Write(fileno(stdout),buf,n); } if(FD_ISSET(fileno(fp),&rset)) { 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); } } } 注意此行,(n=Read(sockfd,buf,MAXLINE))外面括号不能少!否则虽然编译器不报错,(可能会有警告),但是是错误的。去掉括号则变成了一个恒成立的命题。程序也会出现问题。
相关文章推荐
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- UNIX网络编程学习(13)--使用select的str_cli函数的实现
- UNIX网络编程学习(10)续--处理accept返回EINTR错误的TCP服务器程序最终(正确)版本
- 有关opencv的学习(14)—使用自适应阈值处理图像
- 学习博文 如何正确使用Java异常处理机制
- 《unix网络编程》(14)使用select、shutdown的客户服务器程序
- UNIX网络编程学习(15)--使用单进程和select的TCP服务器程序
- Servlet学习笔记(四)-----使用Servlet处理用户注册和登陆
- 批处理命令学习笔记——使用筛选器
- 学习使用点滴-1-字符处理
- lua学习:使用Lua处理游戏数据
- mysql like 查询 有单引号的处理办法。org.hibernate.QueryException: expecting ''', found '<EOF>' [SELECT DISTINCT
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryError: Java heap space
- 在什么情况需要对特征使用归一化处理?--从机器学习项目中开始学习
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryEr
- JMeter学习笔记--使用URL回写来处理用户会话
- TimesTen 数据库复制学习:14. 使用指定端口通讯的数据库复制
- 深度学习中图像的指定图像位置的裁剪处理-使用python、opencv