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