PreludeL'écriture dans une socket est une limitation arbitraire de l'appel système sendfile()?
sendfile()
est un syscall extrêmement utile pour deux raisons:
D'abord, il est moins de code qu'un read()
/write()
(ou recv()
/send()
si vous préférez que jive) boucle.
Deuxièmement, il est plus rapide (moins de syscalls, l'implémentation peut copier entre les périphériques sans tampon, etc ...) que les méthodes susmentionnées.
Code moins. Plus efficace. Impressionnant.
Sous UNIX, tout est (principalement) un fichier. C'est le territoire laid de la collision de la théorie platonique et de la pratique du monde réel. Je comprends que les sockets sont fondamentalement différents des fichiers résidant sur certains appareils. Je n'ai pas exploré les sources de Linux/* BSD/Darwin/quel que soit le système d'exploitation implémente sendfile()
pour savoir pourquoi ce syscall spécifique est limité à l'écriture sur des sockets (en particulier, les sockets de streaming).
Je veux juste savoir ...
Question
Ce qui est limite sendfile()
de permettant le descripteur de fichier de destination pour être autre chose qu'un socket (comme un fichier de disque, ou un tuyau)?
En 2.6.33 et plus tard, l'argument out_fd pour sendfile peut être n'importe quel fd (pas seulement un socket). – ldrg