* OTP 26.1
* cowboy 2.10 HTTPS
* хендлер сделан на cowboy_loop
Симптом:
* работают процессы cowboy_http и cowboy_loop
* у них есть оставшийся в живых порт
* cowboy_http делает ssl:send, в ответ получает {error,enotconn} и игнорирует его
* по порту успешно отрабатывает port_info, но inet:peername возвращает тот же {error,enotconn}
Я не понимаю:
* как такое возможно, что порт остался в таком состоянии?
* какими способами пробовать такое воспроизвести?
воспроизвести так https://github.com/ninenines/cowboy/pull/1590/files#diff-5941d460ec941155e0a6531897c09215142a5c4b21483b5221ef79c31ceb721e а фикс тупой. просто для примера
корень проблемы в inet_drv.c он молча закрывает дескриптор и ничего не отправляет оунеру где-то в tcp_shutdown_async, на сколько я помню поэтому в доке и написано, что нужно обязательно проверять результат выполнения функций send/2 и прочих. но у ковбоя свой путь
Дичь. Спасибо большое за пояснение!
Спасибо за поднятие темы. Думал, вечно висеть будет
Обсуждают сегодня