Ошибка прерванной трубы и сброс соединения узлом 104
Я использую Bottle
сервер для реализации моего собственного сервера, используя реализацию, расположенную не так далеко от простого "мира приветствия", моя собственная реализация - это (конечно, без раздела маршрутизации): bottleApp =bottle.app()
bottleApp.run(host='0.0.0.0',port=80, debug=true)
Мой сервер все время перестает отвечать на запросы, а затем я попадаю в браузер: Connection reset by peer
, broken pipe errno 32
Логи дают мне почти такие же следы стека, как и в вопросе.
Что я пробовал до сих пор без успеха
Завершение строки запуска сервера с помощью try, за исключением того, что-то вроде показанного здесь ответа "mhawke". Это остановило сообщения об ошибках в журналах, по-видимому, потому что я поймал их в
except
оговорка, но проблема в том, что при обнаружении такого исключения это означает, что мы были выброшены изrun
метод контекста, и я хочу поймать его так, чтобы мой сервер не падал.
Я не знаю, возможно ли это, не касаясь внутренних файлов реализацииbottle
,Добавление этого до запуска строки сервера:
from signal import signal, SIGPIPE, SIG_DFL signal(SIGPIPE,SIG_DFL)
Как предложено здесь, но, похоже, это никак не повлияло на то, что не возникло сообщение "Сломанный канал / ошибки сброса соединения" и отзывчивость сервера.Я думал попробовать второй ответ здесь, но я понятия не имею, где найти этот код в контексте
bottle
сервер.
1 ответ
Это похоже на проблему с разрешениями или брандмауэром.
если вам действительно нужно прослушивать порт 80, то вам нужно работать с привилегированной учетной записью. Также вам, вероятно, потребуется открыть порт 80 для трафика TCP.
Я вижу, что вы используете что-то, похожее на Posix (Linux/Unix/OSx). Если вы опубликуете, какую ОС вы используете, я могу отредактировать этот ответ, чтобы более конкретно указать, как открывать брандмауэр и выполнять привилегированные команды (возможно, sudo
но кто знает)