使用select正确处理EOF的str_cli函数
void str_cli(FILE *fp, int sockfd) {
int maxfdp1, stdineof;
fd_set rset;
char buf[MAXLINE];
int n;
stdineof = ;
FD_ZERO(&rset);
for ( ; ; ) {
if (stdineof == ) {
FD_SET(fileno(fp), &rset);
}
FD_SET(sockfd, &rset);
maxfdp1 = max(fileno(fp), sockfd) + ;
select(maxfdp1, &rset, NULL, NULL, NULL);
if (FD_ISSET(sockfd, &rset)) { /* socket is readable */
if ( (n = read(sockfd, buf, MAXLINE)) == ) {
if (stdineof == ) {
return;
} else {
exit();
}
}
write(fileno(stdout), buf, n);
}
if (FD_ISSET(fileno(fp), &rset)) { /* inout is readable */
if ( (n = read(fileno(fp), buf, MAXLINE)) == ) {
stdineof = ;
shutdown(sockfd, SHUT_WR); /* send FIN */
FD_CLR(fileno(fp), &rset);
continue;
}
writen(sockfd, buf, n);
}
}
}
使用select正确处理EOF的str_cli函数的更多相关文章
- select使用实例——str_cli函数(修订版)
我们可以使用select函数重写http://www.cnblogs.com/nufangrensheng/p/3587962.html中的str_cli函数,这样服务器进程一终止,客户就能马上得到通 ...
- TCP回射客户程序:str_cli函数
str_cli函数完成客户处理循环: 从标准输入读入一行文本,写到服务器上,读回服务器对该行的回射,并把回射行写到标准输出上 读入一行,写到服务器 fgets读入一行文本,writen把该行发送给服务 ...
- 第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数
第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; ...
- EOF和scanf函数
EOF和scanf函数 scanf函数的返回值 scanf函数返回成功读入的数据项数,读入数据时遇到了"文件结束(end of file)"或者错误则返回EOF,EOF定义为int ...
- 使用select的str_cli函数的实现
void str_cli(FILE *fp, int sockfd) { int maxfdp1; fd_set rset; char sendline[MAXLINE], recvline[MAXL ...
- 非阻塞读和写:str_cli函数
void str_cli(FILE *fp, int sockfd) { int maxfdp1, val, stdineof; ssize_t n, nwritten; fd_set rset, w ...
- 正确使用stl vecotr erase函数
erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素. 返回值是指向删除的最后一个元素的下一位置的迭代器 Parameters All parameters ar ...
- 使用fork的str_cli函数
void str_cli(FILE *fp, int sockfd) { pid_t pid; char sendline[MAXLINE], recvline[MAXLINE]; ) { /* ch ...
- MySql:SELECT 语句(六) CONCAT() 函数的使用
一.计算字段 为什么要用计算字段? 1)想要在一个字段中既显示公司地址,又显示公司名称,但是往往这两个都不在一个字段中 2)列数据是大小写混合的,但是报表程序需要把他们全部按大写形式展示出来 3)需要 ...
随机推荐
- 【转】设置 vim 显示行号永久有效
在linux环境下,vim是常用的代码查看和编辑工具.在程序编译出错时,一般会提示出错的行号,但是用vim打开的代码确不显示行号,错误语句的定位非常不便.那么怎样才能让vim显示代码的行号呢? 1 临 ...
- 【bfs】献给阿尔吉侬的花束
[题目描述] 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫.今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪.现在研究员们想 ...
- 课后选做题:MyCP
目录 CP命令了解 MyCP实现 CP命令了解 作用:cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中.若 ...
- ACM-ICPC 2015 BeiJing
比赛连接:ACM-ICPC 2015 BeiJing 本次比赛只写了 A G 然后 I题随后补 A 有一个正方形土地,上面有若干块绿洲.让你以x0为界限划一条竖线,要求左边绿洲面积>=右 ...
- 关于json_encode转数组为json对象时里有数组格式数据的问题
前言:这次是给一款小程序提供接口时发现的 别的不多说,下面直接看出现问题的json数据 可以看到,这是一个大的json对象,是由多维数组组成,一般api接口提供的也是这种格式. 但是仔细看红框中的内容 ...
- postman接口测试
拿到API,直接拖到postman里面,修改一下params,send之后查看结果返回 说明一下: 1.get的内容,写入测试URL 和API地址 2.点击bulkEdit,编辑请求的key+valu ...
- 高级组件——表格模型TableModel
通常增删改表格,多使用表格模型,效率更高.具体通过DefaultTableModel类中的方法来实现. TableModel接口——AbstractTableModel抽象类——DefaultTabl ...
- (转载)python: getopt的使用;
注: 该文转载于https://blog.csdn.net/tianzhu123/article/details/7655499python中 getopt 模块, 该模块是专门用来处理命令行参数的 ...
- go 方法
go 方法 Golang中的任何自定义类型,都可以有方法,而不仅仅是struct. 定义:func (recevier type) methodName(参数列表)(返回值列表){} 方法的访问控制, ...
- go kafka
安装导入 go get github.com/Shopify/sarama import "github.com/Shopify/sarama" 使用 1.同步生产者 packag ...