Определить, был ли вызван `connect ()` для сокета TCP - PullRequest
0 голосов
/ 28 июня 2018

Если кажется, что это должно быть невероятно очевидно, но почему-то я не нашел его в документации: https://docs.python.org/3/library/socket.html

Рассмотрим это

import socket
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Как проверить, был ли connect() вызван на my_socket. В настоящее время мой код устанавливает отдельное логическое значение в моем классе, но я считаю, что можно спросить об этом объект сокета. Для пояснения я пишу код клиента и хочу в своих классах провести некоторый самоанализ, чтобы проверить, был ли сокет подключен к серверу.

Что-то вроде

my_socket.is_connected()
=> False
my_socket.connect(("127.0.0.1", 42))
=> None
my_socket.is_connected()
=> True

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Если вы хотите определить, был ли вызван connect, вы можете просто создать подкласс socket.socket следующим образом:

class Sock(socket.socket):
    def connect(self, *args, **kwargs):
        super().connect(*args, **kwargs)
        print("tried to connect!")

А затем используйте Sock точно так же, как вы используете socket.socket:

my_socket = Sock(socket.AF_INET, socket.SOCK_STREAM)
0 голосов
/ 28 июня 2018

Попробуйте позвонить getpeername() и обработать полученную ошибку или состояние, если оно не подключено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...