阻塞socket学习-整理笔记

来源:互联网 发布:阿里云 vps 翻墙 编辑:程序博客网 时间:2024/05/29 13:10

由两个问题展开

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。











0 0