eddy_em: (Default)
[personal profile] eddy_em
Вчера сел проверять CCD_Capture на FLI'шном оборудовании и обнаружил странный косяк: в казалось бы произвольный момент времени при отправке клиенту данных сервер просто падал. Без сегфолтов, без ничего: тихо-мирно. Сначала решил, что это — баг fli'шной библиотеки при одновременной работе с разным железом, натыкал еще мьютексов. Фигвам: не помогло.
Сейчас уже в функции отправки сообщений воткнул
DBG("write %d = %zd", l, write(fd, tmpbuf, l));

и обнаружил, что после отключения клиента еще одно-два сообщения благополучно отправляются (т.е. write, несмотря на отключенный сокет, возвращает длину сообщения, а не -1), а потом оно падает…

Ну и веселуха, блин! На моем рабочем компьютере это никак не проявлялось. Буду думать, какой же велосипед воткнуть!!!

UPD: дурень я, дурень! write в отключенный сокет генерирует SIGPIPE. И этот сигнал убивает мастера! Странно, что я не натыкался на это раньше. В общем, вместо write нужно использовать send с флагом MSG_NOSIGNAL или же глобально отключать реакцию на SIGPIPE!!!
// нужно пересмотреть все свои серверные утилиты и везде сделать такую замену. Похоже, при отключении клиента во время записи ему сигналов поток стабильно отваливался, но т.к. тут же "страж" поднимал новый, я этого не замечал, а в логах на этот предмет не думал даже ковыряться.

October 2025

S M T W T F S
   1234
567 89 1011
121314 15161718
19202122232425
2627 28293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 25th, 2026 05:29 am
Powered by Dreamwidth Studios