So how can I know the kernel is done with my page? As I can simply not free the page right?
um presente para o kernel. O aplicativo não pode modificar essa memória ever , caso contrário, o cache da página e os dados no disco podem ser diferentes.
vmsplice -> pipe -> splice -> tcpsocket
I would wait for a response, at which point the kernel will flush its SEND buffer and my page will be mine again?
não
Aguarde até que uma resposta que no protocolo que você usa, reconheça que todas as páginas de talentos foram recebidas . Então você saberá que o kernel tem liberado o buffer de envio, de todas as páginas de talentos.
(Por acaso, eu não diria que o conteúdo das páginas sobrevive. Eu imagino que possa ser criptografado no local para o IPSec).
Aparentemente, também é possível recuperar "a quantidade de dados não enviados na fila de envio de soquete", então é outra maneira de fazer isso. link (é claro que você não precisa esperar até que ele caia para 0 conforme este link, você poderia reutilizar cada página à medida que ela se tornasse segura). Isso requer pesquisa no caso em que você não está preenchendo a fila de envio do kernel. (Quando você está, você apenas verifica novamente ao mesmo tempo select () epoll () diz que há mais espaço para gravar dados.