在事先不知道的情况下检测Python socket.socket实例是服务器还是客户端?

时间:2016-12-26 21:49:39

标签: python sockets server

有没有办法检测传递给已经具有连接设置的函数的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!")

1 个答案:

答案 0 :(得分:1)

连接的套接字具有对等体,而未连接的套接字没有对等体。因此,您可以使用getpeername来区分已连接和未连接的套接字。

请注意,并非每个未连接的套接字都是服务器套接字。它可能只是一个尚未连接的套接字(即套接字已创建但未连接未连接)。但是如果你只需要区分一个你可以调用accept的socket和一个你接受的socket而不是getpeername就足够了。尽管如此,最好将这些信息保存在本地变量中,而不是一直调用getpeername,因为这是一个系统调用,因此相对昂贵。