【发布时间】:2019-12-18 17:00:37
【问题描述】:
我正在比较当套接字是 tcp 和 unix 套接字时 send 调用可以传输多少字节。
对于 unix 域套接字,这个数字总是 219264,但是对于 TCP,这个数字要高得多。为什么会有这种差异?两个程序都在同一台机器上执行
注意:套接字处于非阻塞模式
检查缓冲区大小,这些是值
unix 域套接字
receive buffer size =212992
send buffer size =212992
TCP 套接字
receive buffer size =1062000
send buffer size =2626560
谁能解释一下为什么会有这种差异?
【问题讨论】:
-
事实是缓冲区大小是有限的,并且没有指定确切的大小,因此无论哪种方式您都必须处理它。您可以通过
setsockopt()更改缓冲区大小,并在需要时使用getsockopt()进行查询,或者只是正确处理send()返回的字节数少于您的请求。 -
@james 不,我理解。我要问的是,与 tcp 套接字相比,unix 套接字发送只发送很少的字节?一般来说,两者都是套接字
-
如果你只发送几个字节,那么无论缓冲区大小是 219264 还是更大的东西,从地狱到早餐时间都没有关系。
-
@user207421 我正在发送 10mb 数据,因为对于 unix 套接字,发送缓冲区大小很小,因此污染事件的数量也更多。我想避免这种情况。
-
@user207421 这意味着在高性能应用程序的情况下不能使用unix套接字?
标签: linux sockets unix tcp unix-socket