冲洗插座意味着什么?

Bjo*_*orn 23 sockets networking

我不太了解套接字,除了如何读取和写入它们就好像它们是文件一样.我对使用套接字选择器知之甚少.我不明白你为什么要冲洗插座,实际发生了什么?这些位只是挂在内存中的某个地方,直到它们被推掉?我在网上读了一些关于套接字的东西,但它都是非常抽象和高级的.

这里到底发生了什么?

BJ *_*mer 49

写入网络套接字和发送数据涉及一定的开销.如果每次进入套接字时都发送数据,那么对于实际数据的每个字节,最终会有40多个字节的TCP头.(假设您正在使用TCP套接字.其他套接字将具有不同的值).为了避免这种低效率,套接字维护一个本地缓冲区,通常有一些超过1000字节.填充该缓冲区时,会在数据周围包裹一个标头,并将数据包发送到其目标.

在许多情况下,您不需要立即发送每个数据包; 如果您正在传输文件,如果没有文件的最终数据,早期数据可能没有任何用处,因此这很有效.但是,如果需要强制立即发送数据,则刷新缓冲区将发送尚未发送的任何数据.

请注意,当您关闭套接字时,它会自动刷新任何重新生成的数据,因此在关闭之前无需刷新.

  • NAGL 与此有什么关系,你知道吗? (2认同)

Ale*_*ski 10

你真的不能冲洗插座.

(从中如何强制套接字在其缓冲区中发送数据?)

你不能强迫它.期.TCP可以自己决定何时可以发送数据.现在,通常当你在TCP套接字上调用write()时,
TCP确实会发送一个段,但是没有保证也没有办法强迫它.TCP不会发送
段的原因有很多:关闭窗口和Nagle算法是
我们想到的两件事.

阅读完整的帖子,它是非常深入的,并为我澄清了很多东西.