关于socket阻塞与非阻塞情况下的recv、seng、read、write返回值问题
1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是<0:出错,=0:连接关闭,>0接收到数据大小,特别:返回值<0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收。只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要循环读取)。
2、阻塞模式与非阻塞模式下write的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞write返回值没有区分,都是<0:出错,=0:连接关闭,>0发送数据大小,特别:返回值<0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续发送。只是阻塞模式下write会阻塞着发送数据,非阻塞模式下如果暂时无法发送数据会返回,不会阻塞着write,因此需要循环发送)。
3、阻塞模式下read返回值 < 0 && errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN时,连接异常,需要关闭,read返回值 < 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)时表示没有数据,需要继续接收,如果返回值大于0表示接送到数据。
非阻塞模式下read返回值 < 0表示没有数据,= 0表示连接断开,> 0表示接收到数据。
这2种模式下的返回值是不是这么理解,有没有跟详细的理解或跟准确的说明?
4、阻塞模式与非阻塞模式下是否send返回值< 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)表示暂时发送失败,需要重试,如果send返回值<= 0, && errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN时,连接异常,需要关闭,如果send返回值 > 0则表示发送了数据?send的返回值是否这么理解,阻塞模式与非阻塞模式下send返回值=0是否都是发送失败,还是那个模式下表示暂时不可发送,需要重发?
5、很多人说阻塞模式下read会阻塞着读,是否这样?我和同事试了不会阻塞read。
6、网络上找了很多资料,说的都很笼统,就分大于0,小于0,等于0,并没有区分阻塞与非阻塞,更没有区分一个错误号,希望哪位高手能按上面的问题逐条回答一下,越详细越好,平时少上CSDN,分少,见谅。
关于socket阻塞与非阻塞情况下的recv、seng、read、write返回值问题相关推荐
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
recv: 阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小, 特别:非阻塞模式下返回 值 <0时并且(errno == EINTR || e ...
- socket的阻塞模式和非阻塞模式(send和recv函数在阻塞和非阻塞模式下的表现)
socket的阻塞模式和非阻塞模式 无论是Windows还是Linux,默认创建socket都是阻塞模式的 在Linux中,可以再创建socket是直接将它设置为非阻塞模式 int socket (i ...
- linux下阻塞的系统调用,Linux下socket设置为非阻塞方式和fcntl系统调用.pdf
Linux 下 socket 设置为非阻塞方式和 fcntl 系统调用 [ 日期: 2011-04-16] 来源: Linux 社区 作者: Linux 用以下方法将 socket 设置为非阻塞方式 ...
- python3socket非阻塞在linux里无效_Linux下socket设置为非阻塞方式和fcntl系统调用
用以下方法将socket设置为非阻塞方式 int flags = fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOC ...
- linux socket 阻塞与非阻塞,同步与异步
在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: 所谓同步,就是在c端发出 ...
- Socket阻塞与非阻塞,同步与异步、I/O模型
[原文链接] 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一 ...
- socket阻塞和非阻塞的区别
socket阻塞和非阻塞的区别 简单点说: 阻塞就是干不完不准回来, 非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用se ...
- 从 Linux 源码看 Socket 的阻塞和非阻塞
转载自 从 Linux 源码看 Socket 的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 大部分高性能网络框架采用的是非阻塞模式.笔者这 ...
- linux下recv 、send阻塞、非阻塞区别和用法
非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明: 基本概念: 阻塞IO:: socket 的阻塞模 ...
- socket阻塞与非阻塞,同步与异步
转自:http://blog.csdn.net/hguisu/article/details/7453390 socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网 ...
最新文章
- GT Transceiver的动态重配置端口
- 异常记录: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError
- django构建网页_通过解决问题的方式学习django,律师如何构建副业
- Duilib学习笔记《04》— 窗体显示
- leetcode练习:292. Nim Game
- Java 8 基础教程 - Predicate,java基础面试笔试题
- 华为Mate 40工程机曝光:并未采用屏下摄像头
- 如何在阿里云linux上部署java项目
- cdq分治(bzoj 1176: [Balkan2007]Mokia bzoj 2683: 简单题)
- python log模块
- java反编译 jd-gui_JD-GUI(Java反编译工具)
- 尔雅计算机基础答案山大,大学计算机基础2018尔雅满分答案
- VTK学习笔记(二十三)vtk空间几何变换
- Merkle Tree、Merkle Proof、SPV安全性分析、Bloom过滤器
- 各种RAID磁盘阵列组实际容量计算方法
- linux上传oracle压缩包,Linux中从oracle官网下载jdk文件不是标准的gzip格式文件问题...
- 如果微软狠心鸿蒙系统,微软强制用户升级华为鸿蒙系统出来你会放弃windows使用鸿蒙吗...
- Bose Soundlink Ⅲ 随机断电故障处理
- C#——Windows银行储蓄管理系统
- Win10 无法加载操作系统,关键系统驱动程序丢失或错误 蓝屏错误代码0xc000007b