С++ socket send/recv vs write/read

В сокет ssize_t send(int __fd, const void* __buf, size_t __n, int __flags) мы получили этот аргумент __flags. Я использую флаг MSG_NOSIGNAL через соединение. Есть ли способ достичь этой функции флага в write? Поскольку я использую этот флаг во всем соединении, его можно установить, когда создается socket. Не стесняйтесь упоминать, если есть способы достижения всех функций __flag.

Ответ 1

Нет. При записи в сокет с write это то же самое, что и вызов send с аргументом flags, установленным в ноль.

В официальной ссылке POSIX

Если fildes ссылается на сокет, write() должен быть эквивалентен send() без установленных флагов.


Однако существует способ "установить" этот флаг постоянно, и это означает, что он игнорирует сигнал SIGPIPE:

signal(SIGPIPE, SIG_IGN);