server端的主要的一个操作就是从socket的fd上进行数据读取。也就是我们经经常使用到的read函数。

欢迎关注我的server代码:http://code.taobao.org/p/fastServer/src/

今天主要是关注的正确的进行read操作

首相,我的socket是已经设置了非堵塞属性。read函数在非堵塞读取fd的时候会遇到不同的errno。

怎样正确的处理这些erron 状态呢?

1、errno == EAGAIN

该错误返回码主要是。当我们使用了    以 O_NONBLOCK的标志打开文件操作符,由于是非堵塞。我们不停的进行read操作,就会有没有数据可读的情况。此时,程序并不会堵塞起来等待数据。准备数据返回,而是read函数返回一个错误。EAGAIN。

就是提示程序没有数据可读了,请稍后 再试。

也就是我们继续recv操作。

2、errno==EINTR

这样的错误,主要是错误描写叙述Interrupted system call。操作也应该继续。

3、当我们read函数返回0的时候。 表明该链接已经断开了。我们这个时候应该把这个链接进行关闭了,也就是调用close操作

以下就是我们应该比較标准使用的一个read处理流程了,例如以下代码

int nread,
nread = read(fd, buf, 1024);
if (nread == -1) {
if (errno == EAGAIN || errno == EINTR) {
nread = 0;
} else {
close(fd);
return;
}
} else if (nread == 0) {
close(fd);
return;
}
if (nread) {
///进行对buff的处理了。 } 因此。仅仅要依照上述代码进行正确处理fd,或者套一层循环都能够。 就能够正确读取数据了。 很多其它文章,欢迎訪问http://blog.csdn.net/wallwind
我的代码文件夹:http://code.taobao.org/u/wallwind/mypro/ 互相学习。互相交流

我的c++server记录----非堵塞下的socket读取操作的更多相关文章

  1. SQL Server索引 - 非聚集索引 <第七篇>

    一.非聚集索引维护 非聚集索引的行定位器值保持相同的聚集索引值,即使该聚集索引列物理上重新定位后,也是如此. 为了优化这个维护开销,SQL Server添加一个指向旧数据页的指针,以在页面分割之后指向 ...

  2. 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境

    原文:第三篇--第二部分--第四文 配置SQL Server镜像--非域环境 本文为非域环境搭建镜像演示,对于域环境搭建,可参照上文:http://blog.csdn.net/dba_huangzj/ ...

  3. Openfire 配置连接SQL SERVER(非默认实例)

    安装好Openfire之后,紧接着进行配置. 连接数据库的时候遇上问题. 打算用我本机上的一个SQL SERVER做为数据库.但是,我本机装了几个SQL SERVER实例,现在我打算使用的是那个非默认 ...

  4. 简单搭建syslog-ng server记录log

    ### 简单搭建syslog-ng server记录log 安装syslog-ng apt-get install syslog-ng 安装syslog-ng 配置syslog-ng vim /etc ...

  5. SQL Server的非聚集索引中会存储NULL吗?

    原文:SQL Server的非聚集索引中会存储NULL吗? SQL Server的非聚集索引中会存储NULL吗? 这是个很有意思的问题,下面通过如下的代码,来说明,到底会不会存储NULL. --1.建 ...

  6. C#中自己动手创建一个Web Server(非Socket实现)

    目录 介绍 Web Server在Web架构系统中的作用 Web Server与Web网站程序的交互 HTTPListener与Socket两种方式的差异 附带Demo源码概述 Demo效果截图 总结 ...

  7. SQL Server 2012新特性(1)T-SQL操作FileTable目录实例

    在SQL Server 2008提供FileStream,以借助Windows系统本身的API来强化SQL Server对于非结构化数据的支持后,SQL Server 2012更是推出了像Contai ...

  8. 【转】SQL Server 创建约束图解 唯一 主键-界面操作

    SQL Server 创建约束图解 唯一 主键-界面操作 SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束, ...

  9. SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...

随机推荐

  1. LeetCode(1)Two Sum

    题目: Given an array of integers, find two numbers such that they add up to a specific target number. ...

  2. Lex与Yacc学习(九)之Yacc语法

    Yacc语法 本文讨论yacc语法的格式并描述可用的各种特征和选项 yacc语法结构 yacc语法包括三部分:定义段.规则段和用户子例程段 ...定义段... %% ...规则段... %% ...用 ...

  3. Java的9种基本数据类型以及封装类

    Java的9种基本数据类型以及封装类 基本类型 大小(单位/字节) 默认值 封装类 byte 1 (byte)0 Byte short 2 (short)0 Short int 4 0 Integer ...

  4. 关于Linux下使用expdp和impdp命令对Oracle数据库进行导入和导出操作

    说明:本次导入和导出采用expdp和impdp命令进行操作,这2个命令均需要在服务器端进行操作 http://www.cnblogs.com/huacw/p/3888807.html 一.    从O ...

  5. 00037_this关键字

    1.成员变量和局部变量同名问题 当在方法中出现了局部变量和成员变量同名的时候,可以在成员变量名前面加上this.来区别成员变量和局部变量. class Person { private int age ...

  6. PYDay2-linux基础\常用命令

    一.linux 理念 一切皆文件 二.常用命令(150) 2.1.rsync rsync是类unix系统下的数据镜像备份工具, 它的特性如下: 可以镜像保存整个目录树和文件系统. 可以很容易做到保持原 ...

  7. Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) 一夜回到小学生

    我从来没想过自己可以被支配的这么惨,大神讲这个场不容易掉分的啊 A. Carrot Cakes time limit per test 1 second memory limit per test 2 ...

  8. 九度oj 题目1536:树的最小高度

    题目描述: 给定一棵无向树, 我们选择不同的节点作为根节点时,可以得到不同的高度(即树根节点到叶子节点距离的最大值), 现在求这棵树可能的最低高度. 输入: 输入可能包含多个测试案例. 对于每个测试案 ...

  9. iOS学习笔记03-UITableView

    一.UITableView基本介绍 默认的UITableView有2种风格: UITableViewStylePlain(不分组) UITableViewStyleGrouped(分组) UITabl ...

  10. 点击不同按钮,加载不同的页面(不使用iframe的情况下)

    <button id="button1">Load Html1</button> <button id="button2"> ...