簡體   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