繁体   English   中英

从套接字读取,而没有从内核空间到用户空间的关联memcpy

[英]Read from a socket without the associated memcpy from kernel space to user space

在Linux中,有没有一种方法可以从套接字读取数据,同时又可以避免从内核空间到用户空间的数据隐式存储?

也就是说,而不是做

ssize_t n = read(socket_fd, buffer, count);

这显然需要内核从网络缓冲区到提供的缓冲区进行memcpy,我会做类似的事情

ssize_t n = fancy_read(socket_fd, &buffer, count);

返回时,缓冲区将指向从网络接收到的非memcpy()数据。

最初,我认为套接字系列的AF_PACKET选项可以提供帮助,但没有帮助。

尽管如此,从技术上讲还是有可能的,因为没有什么可以阻止您实现内核模块处理系统调用,该系统调用返回用户映射的指针到内核数据(即使它不是很安全)。

有关您希望拨打的电话,有几个问题:

  1. 内存管理。 您怎么知道在fancy_read系统调用返回后仍然可以访问内存?
  2. 您如何告诉内核最终释放该内存? 必须有某种形式的内存管理,并且如果您希望内核为您提供一个安全的指向未存储的内存的指针,则需要对内核进行大量更改才能启用此功能。 试想一下,在您告知所有数据不能释放之前,就必须释放它们,因此内核需要跟踪所有这些返回的指针。

这些可以通过多种方式完成,因此基本上可以,但是您需要考虑很多因素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM