Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux unix套接字与tcp套接字发送缓冲区大小_Linux_Sockets_Unix_Tcp_Unix Socket - Fatal编程技术网

linux unix套接字与tcp套接字发送缓冲区大小

linux unix套接字与tcp套接字发送缓冲区大小,linux,sockets,unix,tcp,unix-socket,Linux,Sockets,Unix,Tcp,Unix Socket,我比较了套接字为tcp和unix套接字时发送调用可以传输的字节数 对于unix域套接字,该数字始终为219264,但对于TCP,该数字要高得多。为什么会有这种差异?这两个程序都在同一台机器上执行 注意:插座处于非阻塞模式 检查缓冲区大小,这些是值 unix域套接字 receive buffer size =212992 send buffer size =212992 TCP套接字 receive buffer size =1062000 send buffer size =2626560

我比较了套接字为tcp和unix套接字时发送调用可以传输的字节数

对于unix域套接字,该数字始终为219264,但对于TCP,该数字要高得多。为什么会有这种差异?这两个程序都在同一台机器上执行

注意:插座处于非阻塞模式

检查缓冲区大小,这些是值

unix域套接字

receive buffer size =212992
send buffer size =212992
TCP套接字

receive buffer size =1062000
send buffer size =2626560

有人能解释一下为什么会有这种差异吗?

tcp缓冲区用于已发送但另一端尚未确认的包,以及接收顺序不正确、等待延迟包到达后再提交给应用程序的包。当然,只要消费应用程序不读取()数据,包也会留在缓冲区中


在UNIX套接字上,等待确认的包或包的顺序不是问题,因此,缓冲区可以更小。

tcp缓冲区用于已发送但另一端尚未确认的包,以及已无序接收并等待延迟包到达后再提交给应用程序的包。当然,只要消费应用程序不读取()数据,包也会留在缓冲区中


在UNIX套接字上,等待ACK的包或包的顺序不是问题,因此缓冲区可以更小。

事实是缓冲区大小是有限的,并且没有指定确切的大小,因此无论采用哪种方式,都必须处理它。如果需要,您可以通过
setsockopt()
更改缓冲区大小,并使用
getsockopt()
查询缓冲区大小,或者只需正确处理
send()
返回的字节数少于您请求的字节数。@james不,我理解。我要问的是,与tcp套接字相比,unix套接字上的send只发送很少的字节?一般来说,两者都是sockets如果您只发送几个字节,那么从地狱到早餐时间,缓冲区大小是否为219264或更大并不重要。@user207421我发送10mb数据,因为对于unix sockets,发送缓冲区大小较低,轮询事件的数量也更多。这是我想要避免的。@user207421,这意味着在高性能应用程序中不能使用unix套接字?事实是缓冲区大小是有限的,并且没有指定确切的大小,因此无论采用哪种方法,您都必须处理它。如果需要,您可以通过
setsockopt()
更改缓冲区大小,并使用
getsockopt()
查询缓冲区大小,或者只需正确处理
send()
返回的字节数少于您请求的字节数。@james不,我理解。我要问的是,与tcp套接字相比,unix套接字上的send只发送很少的字节?一般来说,两者都是sockets如果您只发送几个字节,那么从地狱到早餐时间,缓冲区大小是否为219264或更大并不重要。@user207421我发送10mb数据,因为对于unix sockets,发送缓冲区大小较低,轮询事件的数量也更多。这是我想要避免的。@user207421,这意味着在高性能应用程序中不能使用unix套接字?您所说的“包的顺序不是问题”是什么意思.你是说数据不会按发送顺序接收吗?在互联网上,无法保证包裹会按发送顺序到达,对吗。TCP正在等待,直到包的顺序可以恢复,然后在接收数据时将包(其有效负载)呈现给客户端“包的顺序不是问题”是什么意思.你是说数据不会按发送顺序接收吗?在互联网上,无法保证包裹会按发送顺序到达,对吗。TCP正在等待,直到包的顺序可以恢复,然后在接收数据时将包(其有效负载)呈现给客户端