python中socket在bind之后listen,比如listen(5)这个5,是对什么的限制
高洛峰
高洛峰 2017-04-18 09:40:49
0
3
871

服务端

# 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个连接应该报错的

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(3)
大家讲道理

La taille de la file d'attente de connexion TCP, c'est-à-dire le nombre de connexions

Détails de la poignée de main TCP et de la communication socket

伊谢尔伦

Python n'a pas été étudié, mais en c, il fait référence à la longueur de la file d'attente du client qui peut établir une connexion côté serveur, indiquant que le serveur a connu deux poignées de main en attente de l'appel système d'acceptation, dans le livre Programmation de serveur Linux haute performance A mentionné que le retard actuel n'est qu'une valeur recommandée pour le noyau. En fait, il peut être légèrement plus important. Si je me souviens bien, voici comment c'est décrit

刘奇
sock_server.listen(5)  # 开始监听TCP传入连接

La valeur transmise spécifie le nombre maximum de connexions que le système d'exploitation peut suspendre avant de rejeter la connexion. Cette valeur doit être d'au moins 1 et 5 conviendra à la plupart des applications.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal