套接字默认状态是阻塞的,这就意味着当发出一个不能立刻完成的套接字调用时,其进程将被投入睡眠,等待相应操作完成。
可能阻塞的套接字调用可分为四类:
(1)输入操作:read,readv,recv,recvfrom,recvmsg,如果某个进程对一个
阻塞的TCP套接字调用这些输入函数之一,而套接字的接收缓冲区中没有数据可读,该进程将被投入睡眠中,直到有些数据到达。TCP是字节流协议,该唤醒就是要有数据到达,可能是单个字节也可能是完整TCP分节数据,想等到某个固定数目数据可读,可用readn或者指定MSG_WAITALL.UDP是数据报协议,如果一个阻塞的UDP套接字的接收缓冲区为空,对调用输入函数的进程投入到睡眠中
(2)输出操作:write,writev,send,sendto,sendmsg这5个函数。对一个tcp套接字,内核将从
应用进程的缓冲区到
该套接字的发送缓冲区复制数据对于阻塞的套接字,如果其发送缓冲区没有空间,进程投入睡眠,直到有空间为止.UDP套接字不存在真正意义上的发送缓冲区,内核只复制应用程序数据并把它沿协议栈向下传送,渐次加上UDP首部和IP首部
(3)接受外来连接,ac