Доброго всем дня!
Сейчас в процессе написания модуля для nginx по генерации PDF (https://github.com/undying/nginx-html2x-module/blob/master/src/ngx_http_html2x_module.c#L205) и наткнулся в процессе на странное.
Началось с того, что если тестировать локально, то генерация и отдача PDF работает.
Если разнести сервер и клиента на разные машины, начинаются проблемы.
В логе нашел следующее:
2019/11/24 23:22:31 [debug] 9#9: *1 http write filter limit 0
2019/11/24 23:22:31 [debug] 9#9: *1 writev: 44540 of 168186
2019/11/24 23:22:31 [debug] 9#9: *1 writev: -1 of 123646
2019/11/24 23:22:31 [debug] 9#9: *1 writev() not ready (11: Resource temporarily unavailable)
2019/11/24 23:22:31 [debug] 9#9: *1 http write filter 000055D3FDBEFF60
2019/11/24 23:22:31 [debug] 9#9: *1 http copy filter: -2 "/html2pdf?dpi=100"
2019/11/24 23:22:31 [debug] 9#9: *1 http finalize request: -2, "/html2pdf?dpi=100" a:1, c:1
2019/11/24 23:22:31 [debug] 9#9: *1 event timer add: 3: 60000:1302169663
2019/11/24 23:22:31 [debug] 9#9: *1 epoll add event: fd:3 op:3 ev:80002005
2019/11/24 23:22:32 [debug] 9#9: *1 http run request: "/html2pdf?dpi=100"
2019/11/24 23:22:32 [debug] 9#9: *1 http writer handler: "/html2pdf?dpi=100"
2019/11/24 23:22:32 [debug] 9#9: *1 http output filter "/html2pdf?dpi=100"
2019/11/24 23:22:32 [debug] 9#9: *1 http copy filter: "/html2pdf?dpi=100"
2019/11/24 23:22:32 [debug] 9#9: *1 write old buf t:0 f:0 00007FFFC360B460, pos 0000000000000000, size: 1254989623795351808 file: 94368983417552, size: -94368983417552
2019/11/24 23:22:32 [alert] 9#9: *1 negative size buf in writer t:0 r:0 f:0 00007FFFC360B460 0000000000000000-116A9E69E31F8100 000055D3FDBBFF00 94368983417552-0, client: 192.168.1.228, server: , request: "POST /html2pdf?dpi=100 HTTP/1.1", host: "html2x.domain.local"
2019/11/24 23:22:32 [debug] 9#9: *1 http copy filter: -1 "/html2pdf?dpi=100"
2019/11/24 23:22:32 [debug] 9#9: *1 http writer output filter: -1, "/html2pdf?dpi=100"
Насколько я понял, после первой пачки байт сокет становится занят и запись откладывается, но с наступлением таймера, при повторной попытке записи оказывается, что буфер для чтения пуст.
Пока не понял, почему так может быть. Был бы благодарен за любую подсказку.