Je travaille sur l'écriture d'une application réseau en C++ sur la plate-forme Linux en utilisant l'API sockets typique, et j'examine deux façons d'écrire un tableau d'octets vers un flux TCP: soit en appelant write(), soit en appelant send(). Je sais que, puisque c'est Linux, le handle de socket est simplement un descripteur de fichier, et donc il est valide d'effectuer des appels read() et write() sur le socket, cependant l'API sockets fournit aussi send() et recv () fonctionne pour effectuer les mêmes tâches. Je me demande donc s'il y a une raison particulière de choisir une classe de fonctions par rapport à l'autre - les fonctions d'envoi/de recueil sont-elles optimisées pour l'écriture/lecture en réseau, sont-elles plus performantes, etc. Ou est-ce vraiment arbitraire quelles fonctions j'utilise? Est-ce que read() et write() se comportent correctement dans tous les cas?Impact de l'utilisation de write() au lieu de send() lors de l'écriture sur un socket
Merci pour toute idée!
Est-ce vrai aussi pour FreeBSD ou d'autres plateformes? - Cette ligne n'apparaît pas dans ma page de manuel send (2). –
@ GoodPerson Cela s'applique à toutes les plateformes. Si ce n'était pas le cas, 'inetd' et autres ne fonctionneraient pas. ('inetd' utilise votre socket dans le stdin et le stdout de votre processus de démon, et votre processus peut interagir directement avec stdin et stdout de la manière habituelle, sans se rendre compte qu'il s'agit de sockets. –