Есть приложение (а точнее модуль), которое открывает tcp сокет и затем чередует запись и чтение из сокета. Есть ненулевая вероятность, что на той стороне в любой момент сокет может быть закрыт, соответственно при очередном write() есть вероятность получить sigpipe. Понятно что на sigpipe можно поставить обработчик или заигнорить его, но делать так в модуле плохо, потому как обработчик глобальный. Можно заюзать send() вместо write() с параметром MSG_NOSIGNAL. Кстати, насколько это переносимо?
А есть ли способы, оставив write() и не делая глобавльный обработчик, гарантировать, что приложение не свалится от SIGPIPE?
Схема работы такая:
- открыть сокет
- запись
- чтение
- запись
- чтение
...