您的位置:首页 > 理论基础 > 计算机网络

《Unix网络编程》读书笔记(二)

2017-05-27 23:32 176 查看

第16章 非阻塞IO

16.1 概述

可能阻塞的套接口调用可分为四类:

(1)输入操作:read, readv, recv, recvfrom, recvmsg,当对一个阻塞的TCP套接口(缺省设置),调用这些函数,而且该套接口对应的接收缓冲区没有数据可读时,该进程投入睡眠,知道到达一些数据;

对于UDP, 若它的接收缓冲区为空,一样会投入睡眠;

对于非阻塞,如果输入操作不能满足(tcp为一个字节,UDP为一个完整的数据报可读),相应调用将立即返回一个EWOULDBLOCK错误;

(2)输出操作:包括write, writev, send, sendto和sendmsg, 对于阻塞的套接口,如果其发送缓冲区没有空间,将睡眠;

对于一个非阻塞的TCP, 如果发送缓冲区没有空间,则返回一个EWOULDBLOCK错误;

UDP不存在真正的发送缓冲区,因此不会想tcp一样阻塞,但会因其他原因阻塞;

(3)accept函数,在连接未到来之前,阻塞的套接口会投入睡眠,而非阻塞的会立即返回一个EWOULDBLOCK错误;

(4)connect函数, connect必须要等到它收到对于自己的SYN的ACK才会返回,这意味着connect总是阻塞进程至少一个到服务器的RTT时间

16.2 非阻塞的读和写(先过吧,是一个例子)

16.3非阻塞connect

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: