Files
kernel_Notes/Zim/Programme/APUE/zhuse.txt
2012-08-08 15:17:56 +08:00

21 lines
2.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Content-Type: text/x-zim-wiki
Wiki-Format: zim 0.4
Creation-Date: 2011-06-02T22:16:04+08:00
====== zhuse ======
Created 星期四 02 六月 2011
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分少见谅。