有没有办法检测传递给已经具有连接设置的函数的socket.socket
实例是服务器端套接字(已执行socket.accept()
)还是客户端套接字(已执行socket.connect()
。
基本上我正在寻找一些东西来检查实现is_server_socket
下面使用的套接字:
def func(sock):
if is_server_socket(sock):
print("I'm a server!")
else:
print("I'm a client!")
答案 0 :(得分:1)
连接的套接字具有对等体,而未连接的套接字没有对等体。因此,您可以使用getpeername来区分已连接和未连接的套接字。
请注意,并非每个未连接的套接字都是服务器套接字。它可能只是一个尚未连接的套接字(即套接字已创建但未连接未连接)。但是如果你只需要区分一个你可以调用accept的socket和一个你接受的socket而不是getpeername就足够了。尽管如此,最好将这些信息保存在本地变量中,而不是一直调用getpeername,因为这是一个系统调用,因此相对昂贵。