ssize_t read(int fd, void * data, size_t count); 确切地说是做什么的?
在很多文章中,网络中经常会写一些文章,试图从中读到或描述符fd。那是什么意思?“它在尝试”:/这样的套接字是如何设计的?操作系统会缓冲传入的消息吗?或者读是一个时间关键的操作?我的意思是,如果我不及时“阅读”,是否会有一些包裹丢失的可能性?
编辑:
我想知道为什么这没有阻塞。然后我想知道为什么要读(.)除了我在代码片段中看到的所有函数之外,还有其他参数。最后,我意识到这是read(.)非recv(.)不幸的是,它还能像我预期的那样工作。我也不知道我们的代价是什么。(不要编辑)我不得不承认德语的例子对读者的影响更大.
发布于 2012-11-08 21:52:41
Linux将缓冲到达连接TCP套接字上的任何数据,默认情况下最多可达几兆字节。你不必在数据到达的同时阅读。
netstat -tn将显示每个连接套接字的Recv-Q和Send-Q,即每个方向排队的字节数。
发布于 2012-11-08 22:57:36
正如Ekman回答的那样,即使您不仔细阅读,系统也会缓冲一些数据。
当缓冲区被越来越多的填充后,接收方的TCP/IP实现将减少公布的接收窗口大小,从而导致对等方发送较小的数据块,从而有效地抑制传输。当缓冲区已满时,窗口大小下降到零,并且不允许对等方发送任何其他数据。即使发生这种情况,也不会丢失任何数据,因为一旦清除接收缓冲区,对等方将恢复发送数据包。
正确的TCP/IP实现可以保证跳过不会丢失任何数据--连接要么可靠且工作,要么完全丢失,这是由read返回-1表示的。
https://stackoverflow.com/questions/13298177
复制相似问题