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!!!
// нужно пересмотреть все свои серверные утилиты и везде сделать такую замену. Похоже, при отключении клиента во время записи ему сигналов поток стабильно отваливался, но т.к. тут же "страж" поднимал новый, я этого не замечал, а в логах на этот предмет не думал даже ковыряться.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

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 03:57 pm
Powered by Dreamwidth Studios