Unix网络编程之socket阻塞与非阻塞模式下函数调用结果分析

本文探讨了Unix网络编程中,套接字的默认阻塞模式及其影响。阻塞模式下,进程在IO操作无法立即完成时会被挂起,如socket的读写、accept和connect等函数。非阻塞模式则可通过setsockopt和ioctl设置,此时进程不会等待,而是立即返回特定状态。理解这两种模式对于高效处理socket至关重要。
摘要由CSDN通过智能技术生成

套接字默认状态是阻塞的,这就意味着当发出一个不能立刻完成的套接字调用时,其进程将被投入睡眠,等待相应操作完成。

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

(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值