首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux网络编程。“读(.)”幕后发生了什么事?

Linux网络编程。“读(.)”幕后发生了什么事?
EN

Stack Overflow用户
提问于 2012-11-08 21:32:18
回答 2查看 311关注 0票数 4

ssize_t read(int fd, void * data, size_t count); 确切地说是做什么的?

在很多文章中,网络中经常会写一些文章,试图从中读到或描述符fd。那是什么意思?“它在尝试”:/这样的套接字是如何设计的?操作系统会缓冲传入的消息吗?或者读是一个时间关键的操作?我的意思是,如果我不及时“阅读”,是否会有一些包裹丢失的可能性?

编辑:

我想知道为什么这没有阻塞。然后我想知道为什么要读(.)除了我在代码片段中看到的所有函数之外,还有其他参数。最后,我意识到这是read(.)非recv(.)不幸的是,它还能像我预期的那样工作。我也不知道我们的代价是什么。(不要编辑)我不得不承认德语的例子对读者的影响更大.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-08 21:52:41

Linux将缓冲到达连接TCP套接字上的任何数据,默认情况下最多可达几兆字节。你不必在数据到达的同时阅读。

netstat -tn将显示每个连接套接字的Recv-QSend-Q,即每个方向排队的字节数。

票数 4
EN

Stack Overflow用户

发布于 2012-11-08 22:57:36

正如Ekman回答的那样,即使您不仔细阅读,系统也会缓冲一些数据。

当缓冲区被越来越多的填充后,接收方的TCP/IP实现将减少公布的接收窗口大小,从而导致对等方发送较小的数据块,从而有效地抑制传输。当缓冲区已满时,窗口大小下降到零,并且不允许对等方发送任何其他数据。即使发生这种情况,也不会丢失任何数据,因为一旦清除接收缓冲区,对等方将恢复发送数据包。

正确的TCP/IP实现可以保证跳过不会丢失任何数据--连接要么可靠且工作,要么完全丢失,这是由read返回-1表示的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13298177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档