Найти - Пользователи
Полная версия: Как восстановить работу сокета после tornado?
Начало » Web » Как восстановить работу сокета после tornado?
1
axe
Положим, я неправильно завершил работу приложения (сервер для web-сокетов), которое работает на фреймвёрке tornado (через Ctrl+Z).
Пробую запустить приложение повторно, то получаю ошибку:
socket.error: Address already in use
Смотрю ps aux и выполняю kill:
$ ps aux |grep chatdemo.py
user 9740 0.0 0.3 177312 11036 pts/4 T 19:37 0:00 /usr/bin/python26 ./chatdemo.py
user 17801 0.0 0.0 61200 828 pts/7 S+ 19:57 0:00 grep chatdemo.py
$ kill -9 9740
Далее перезапускаю приложение, но приконнектиться к web-сокету из браузера нельзя. Гугл пишет:
WebSocket port 6000 blocked
Доступа к настройкам сетевого сокета нет (нет возможности установить so_reuseaddr).

Как починить сокет, чтобы приложение стартовало и могло работать?
dimabest
SO_REUSEADDR можно установить в программе:
my_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
axe
dimabest
SO_REUSEADDR можно установить в программе:
my_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
у меня нет ссылки на сокет, он где-то в глубине tornado
o7412369815963
> (через Ctrl+Z)
эта команда переводит приложение на паузу, а не вырубает его.

если после вырубания порт занят, то возможно там повис “ацепт”, нужно передать на этот порт что-нибудь, например в браузере нажать F5 (послать запрос)
axe
o7412369815963
если после вырубания порт занят, то возможно там повис “ацепт”, нужно передать на этот порт что-нибудь, например в браузере нажать F5 (послать запрос)
Браузер и после ctrl+f5 не может приконнектиться к порту.
Я не знаю, что значит “ацепт повис”, но понятно, что с сокетом что-то не так. Есть ли возможность сбросить сокет, не создавая дополнительных программ.
Т.е. чтобы перед стартом цикла сервера вебсокетов, я мог сделать в своей программе какие-то проверки и как-то почистить целевой сокет?
o7412369815963
> Браузер и после ctrl+f5 не может приконнектиться к порту.
Это правильно, после ctrl+f5 порт свободен?
axe
o7412369815963
Это правильно, после ctrl+f5 порт свободен?
как бы это сказать:
sudo netstat -nap | grep 6000
возвращает пустоту, порт не видит.

Программа стартует, т.е. порт “как будто работает”. Но из браузера достучаться невозможно.

На порту 5001 программа запускается и браузер коннектится.
axe
o7412369815963
если после вырубания порт занят, то возможно там повис “ацепт”, нужно передать на этот порт что-нибудь
пробовал запустить другой скрипт на этом порту и с другого компа приконнектиться, чтобы получить данные. данные приходят/уходят нормально, скрипт работает.
но к серверу web-сокетов приконектиться по прежнему нельзя.
jcrow
o7412369815963
> (через Ctrl+Z)
эта команда переводит приложение на паузу, а не вырубает его.
Вот именно. Напишите в консоли fg, чтобы с паузы снять.
axe
jcrow, спасибо, ценная информация.
Но это вопрос уже в другом - как же восстановить сокет, чтобы web-сокеты всё-таки начали работать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB