Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 15, 2018 18:40:37

BM21
Зарегистрирован: 2018-09-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

twisted ошибка подключения,

Подключаюсь к хосту вот так, порт этот закрыт. Но ошибки нету, и реактор не останавливается.

В коде соответсвенно пытаюсь подкл к порту 852 который закрыт, таймаут подкл. стоит 5 сек.
Не каких сообщений на экране.. Если прописать прописать открытый порт, то callback срабатывает почему так?

 from twisted.internet import reactor
from twisted.internet.protocol import Protocol, ClientFactory
from twisted.internet.endpoints import TCP4ClientEndpoint
HOST = '127.0.0.1'
PORT = 852
class Factory(ClientFactory):
    def clientConnectionFailed(self, connector, reason):
        print "ConnectionError"
        reactor.stop()
    def buildProtocol(self, addr):
    	return Protocol()
def error(reason):
    print reason, "error"
    reactor.stop()
def connected(connector):
	print "connected"
	reactor.stop()
point = TCP4ClientEndpoint(reactor, HOST,
                      PORT,5)
d = point.connect(Factory())
d.addErrback(error)
d.addCallback(connected)
reactor.run()


Upd: По первому вопросу разобрался, причина была в функции error не тот аргумент в print передавал.
Теперь второй вопрос, этот же код почемуто вызывает и Errback и Callback. Хотя по логике должен только Errback вызыватся ?

Отредактировано BM21 (Сен. 17, 2018 10:36:23)

Офлайн

#2 Ноя. 2, 2019 15:56:25

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

twisted ошибка подключения,

Всё правильно вызывает.
“def error(…)” у тебя не вовзращает ошибки (результат “None”) он как успех попадает в следующий “def callback(…)”.
В данном случае лучше делать: “d.addCallback(…).addErrback(…)”, “d.addCallbacks(…)” или в “def error(…)” добавь “return reason”.
Вместо “reactor.stop()” лучше сделай “reactor.callLater(0, reactor.stop)”.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version