Was ist der Unterschied zwischen read()
y recv()
und zwischen send()
y write()
in der Socket-Programmierung in Bezug auf Leistung, Geschwindigkeit und andere Verhaltensweisen?
Antworten
Zu viele Anzeigen?Der Unterschied besteht darin, dass recv()
/ send()
arbeiten nur mit Socket-Deskriptoren und lassen Sie bestimmte Optionen für die eigentliche Operation angeben. Diese Funktionen sind etwas spezieller (Sie können zum Beispiel ein Flag setzen, um die SIGPIPE
oder zum Senden von Out-of-Band-Nachrichten...).
Funktionen read()
/ write()
sind die universal Dateideskriptorfunktionen, die auf alle Deskriptoren wirken.
Per der erste Treffer bei Google
read() ist äquivalent zu recv() mit einem Flags-Parameter von 0. Andere Werte für den Flags-Parameter ändern das Verhalten von recv(). Analog dazu entspricht write() send() mit flags == 0.
Ich habe erst kürzlich festgestellt, dass ich bei der Verwendung von write()
auf einem Socket in Windows, funktioniert es fast (der FD, der an write()
ist nicht derselbe wie derjenige, der an send()
; ich habe _open_osfhandle()
um den FD zu veranlassen, an write()
). Es funktionierte jedoch nicht, als ich versuchte, Binärdaten zu senden, die das Zeichen 10 enthielten. write()
irgendwo vor diesem Zeichen 13 eingefügt. Ändern Sie es in send()
mit einem Flags-Parameter von 0 hat dieses Problem behoben. read()
könnte das umgekehrte Problem auftreten, wenn 13-10 in den Binärdaten aufeinander folgen, aber ich habe es nicht getestet. Aber das scheint ein weiterer möglicher Unterschied zu sein zwischen send()
y write()
.
- See previous answers
- Weitere Antworten anzeigen