ホームページ  >  に質問  >  本文

python中socket在bind之后listen,比如listen(5)这个5,是对什么的限制

服务端

# coding:utf-8   
# server.py                                                               
import socket

sock_server = socket.socket()
sock_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock_server.bind(("127.0.0.1",1234))
sock_server.listen(3)
print("server start ...")
while True:
    tmp = sock_server.accept()
    print(tmp,"\n\n") 

客户端

# coding:utf-8                                                                  
import socket


def make_socks(sock_num):
    socks = []
    for i in range(sock_num):
        tmp_sock = socket.socket()
        tmp_sock.connect(("127.0.0.1",1234))
        socks.append(tmp_sock)
    

    return socks

if __name__ == "__main__":
    make_socks(5)

如上例代码中,有listen(3),这个3是指什么,是指,这个socket只能与3个socket建立链接吗,为什么我用上面的代码可以创建大于3个的tcp连接却没报错,理论上大于3个连接应该报错的

高洛峰高洛峰2741日前852

全員に返信(3)返信します

  • 大家讲道理

    大家讲道理2017-04-18 09:42:49

    TCP 接続キューのサイズ、つまり接続数

    TCP ハンドシェイクとソケット通信の詳細

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:42:49

    Python は研究されていませんが、C では、サーバー側で接続を確立できるクライアントのキューの長さを指し、サーバーが accept システム コールを待機するハンドシェイクを 2 回経験したことを示しています。 Linux ハイパフォーマンス サーバー プログラミング 現在のバックログはカーネルの推奨値にすぎないと述べましたが、実際にはそれよりわずかに大きくなる可能性があります。私の記憶が正しければ、次のように説明されています

    返事
    0
  • 怪我咯

    怪我咯2017-04-18 09:42:49

    リーリー

    渡される値は、オペレーティング システムが接続を拒否する前に一時停止できる接続の最大数を指定します。この値は少なくとも 1 である必要があり、ほとんどのアプリケーションでは 5 で十分です。

    返事
    0
  • キャンセル返事