- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
你能解释一下 SO_SNDBUF
和 SO_RCVBUF
选项到底是什么吗?
好的,出于某种原因,操作系统会缓冲传出/传入数据,但我想澄清一下这个问题。
好的文章也会很棒。
我用谷歌搜索但没有找到任何有用的信息。
最佳答案
“SO_”前缀用于“套接字选项”,所以是的,这些是针对每个套接字缓冲区的每个套接字设置。通常有系统范围的默认值和最大值。
SO_RCVBUF
更容易理解:它是内核分配的缓冲区大小,用于保存在数据通过网络到达给定套接字和被读取之间的时间到达给定套接字的数据拥有这个套接字的程序。使用 TCP,如果数据到达而您没有读取它,缓冲区将填满,并且发送方将被告知放慢速度(使用 TCP 窗口调整机制)。对于 UDP,一旦缓冲区已满,新数据包将被丢弃。
SO_SNDBUF
,我认为,只对 TCP 很重要(在 UDP 中,无论您发送什么,都会直接发送到网络)。对于 TCP,如果远程端没有读取,您可以填充缓冲区(这样远程缓冲区变满,然后 TCP 将这个事实传达给您的内核,并且您的内核停止发送数据,而是将其累积在本地缓冲区中直到它填上)。或者,如果存在网络问题,它可能会填满,并且内核没有收到它发送的数据的确认。然后它将减慢在网络上发送数据的速度,直到最终传出缓冲区填满。如果是这样,应用程序将来对该套接字的 write()
调用将被阻止(或者返回 EAGAIN
如果您设置了 O_NONBLOCK
选项) .
这一切在 Unix Network Programming 中得到了最好的描述书。
关于windows - 什么是 SO_SNDBUF 和 SO_RCVBUF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4257410/
我无法理解以下代码段的工作方式和原因: /* Now lets try to set the send buffer size to 5000 bytes */ size = 5000
你能解释一下 SO_SNDBUF 和 SO_RCVBUF 选项到底是什么吗? 好的,出于某种原因,操作系统会缓冲传出/传入数据,但我想澄清一下这个问题。 他们的角色(通常)是什么? 它们是每个套接
我有一个测试 unix 域服务器,它有以下 SO_SNDBUF 设置为 1024000当连接进来时: for ( ; ; ) { connfd = accept(fdfromps, 0, 0)
我正在尝试使用较小的 SO_SNDBUF 值,主要是为了测试我自己的缓冲代码。 我已将它设置为 1024(尽管当我读回它时它是 4608)。我使用边缘触发的 epoll 在可以写入时得到通知。以下是我
我在 Linux 机器上有超过 300 万个文件描述符,所以我查看了套接字缓冲区大小与 RAM 大小的关系如何限制机器可以处理的最大同时 tcp 连接数。有没有类似经历的,请指教。谢谢。 最佳答案 这
我想使用 socketpair 在两个线程之间发送消息。我正在编写代码以找出使用 socketpair 可以发送多少条消息,消息大小为 16 字节(两个指针)。我使用的代码如下: int fds[2]
您好,我有以下程序来检查 UDP 套接字的发送缓冲区大小。但是,我的返回值让我有点困惑。我使用以下简单的应用程序: #include #include int main(int argc, cha
我试图降低我的非阻塞 TCP 套接字上的发送缓冲区大小,以便我可以正确显示上传进度条,但我看到了一些奇怪的行为。 我正在创建一个非阻塞的 TCP 套接字,将 SO_SNDBUF 设置为 1024,验证
我是一名优秀的程序员,十分优秀!