检测是否在TCP套接字上调用了connect()

时间:2018-06-28 12:58:22

标签: python sockets

如果觉得这应该非常明显,但是我却在文档中找不到它: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 :(得分:3)

尝试致电getpeername()并处理由此产生的错误或未连接状态。

答案 1 :(得分:2)

如果要检测是否已调用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)