我正在编写一个网络应用程序,它将在一对套接字之间传输数据。
只要源套接字中有一些数据可用,它就会将其传输到目标套接字,反之亦然。但我在这里寻找最有效的方法来做到这一点。
到目前为止,我已经找到了两种方法来做到这一点:
1.使用read()
和write()
调用在套接字之间传输数据。
1.使用splice()
和管道从内核空间传输套接字缓冲区。
在第一种方法中,每次都必须将数据复制到用户空间缓冲区,而在第二种方法中,必须将数据从源套接字复制到管道,然后从管道复制到目标套接字。因为splice()
的其中一个描述符必须是管道。类似地,在sendfile()
的情况下,其描述符之一必须是文件。
我想知道是否有任何其他零拷贝数据传输机制可用于在套接字之间移动数据。
1条答案
按热度按时间xbp102n01#
解决方案是SOCKMAP -没有系统调用开销,也没有用户空间/内核空间复制。
在这里找到一篇文章https://blog.cloudflare.com/sockmap-tcp-splicing-of-the-future/详细解释了它