博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
阅读量:6190 次
发布时间:2019-06-21

本文共 1261 字,大约阅读时间需要 4 分钟。

#include    "unp.h"voidstr_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))外面括号不能少!否则虽然编译器不报错,(可能会有警告),但是是错误的。去掉括号则变成了一个恒成立的命题。程序也会出现问题。

 

转载于:https://www.cnblogs.com/hehehaha/archive/2013/02/25/6332953.html

你可能感兴趣的文章
netzapper操作
查看>>
es安装
查看>>
点击按钮,文本框如何不失去焦点
查看>>
微服务说的局限性
查看>>
a标签的onclick和href同时存在的写法
查看>>
中国公有云三巨头,同时支持Rancher Kubernetes平台
查看>>
ModuleNotFoundError: No module named 'tornado'解决办法
查看>>
centos7的firewall-cmd怎么让指定ip能访问指定端口?
查看>>
微信小程序开发流程
查看>>
@Configuration和@Bean的用法和理解
查看>>
2017年网站建设公司现状分析
查看>>
python windows7下创建~/.pypirc文件
查看>>
设计模式六大原则
查看>>
eclipse idea 导入maven项目
查看>>
sweetalert
查看>>
中国2017 Google 开发者大会第二天简单回顾
查看>>
别嘲笑老同志了!网络诈骗,19岁小鲜肉最容易中招
查看>>
ESL系统的Docker化部署
查看>>
瑞士联邦议会批准关于加密货币监管的指示
查看>>
Django框架配置
查看>>