阻塞socket学习-整理笔记

本文探讨了阻塞模式下socket的工作原理,重点分析了read和write操作的行为差异,并深入讨论了send与write的区别,旨在帮助读者更好地理解socket通信机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由两个问题展开

1.阻塞模式下,socket的输入缓冲区没有可读取数据时,read操作会返回错误。答案是“正确”,可能的解释是返回-1。

2.在阻塞socket上调用write函数发送数据,函数返回时,表示数据已经发送出去。答案是“错误”,可能的解释是返回错误也叫返回。


两个对应的疑问:

问题1,对应的,找到类似这样一句话“阻塞模式下,send会卡住,不返回控制权,直到数据传到TCP层继续”,既然叫阻塞,阻塞什么?阻塞程序的运行了,也就是不返回。

既然阻塞不返回,无数据可以读取为什么还会返回错误,而不是卡住等待?


关于问题2,是,函数返回也可以返回错误,就不代表发送出去,但是前提也强调了,是阻塞socket,所以,这个write为什么就不会卡住?还有write和send什么区别?是分两步?write一步,send一步,那write确实不代表发送出去,是写到缓冲区。


表面看起来,问题的解释和已知的有些矛盾,这两个题都是阻塞,可是都能不等待发出/读入就返回控制权继续运行。

那么就要分清write、send和read的区别才能搞清楚到底哪种说法对,以及哪步该卡住哪步不该卡住了。








小知识:用linux当高性能服务器而不是windows的一个原因,说重叠IO比较适合高性能服务器,WINDOWS的IOCP需要事先分配缓存,比较吃内存,而linux就不会。目前这句话理解不深刻,什么是重叠IO和IOCP。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值