В чем разница между read() и recv(), а также между send() и write()?
в чем разница между read() и recv() , а также между send() и write() в программировании сокетов ? производительность, скорость и другое поведение.
6 ответов:
единственная разница заключается в том, что recv/send позволяет указать определенные параметры для фактической операции . чтение / запись являются "универсальными" функциями дескриптора файла, в то время как recv/send немного более специализированы (например, вы можете установить флаг для игнорирования SIGPIPE или для отправки внеполосных сообщений...).
read() эквивалентно recv () с параметром flags равным 0. Другие значения параметра flags изменяют поведение recv (). Аналогично, write() эквивалентно send () с флагами == 0.
read()
иwrite()
более универсальные, они работают с любым дескриптором файла. Однако, они не будут работать на Windows.вы можете передать дополнительные параметры для
send()
иrecv()
, поэтому вы можете использовать их в некоторых случаях.
Я только недавно заметил, что когда я использовал
write()
на сокете в Windows, он почти работает (FD передается вwrite()
Это не то же самое, что передано вsend()
; я использовал_open_osfhandle()
чтобы получить FD, чтобы перейти кwrite()
). Однако это не сработало, когда я попытался отправить двоичные данные, которые включали символ 10.write()
где-то вставлен символ 13 до этого. Изменение его наsend()
с параметром flags 0 исправлена эта проблема.read()
может иметь обратную проблему, если 13-10 последовательный в двоичных данных, но я не проверял его. Но это, кажется, еще одно возможное различие междуsend()
иwrite()
.