Python socketのlistenパラメータ(数字)は何を表していますか?


疑問

socketを呼び出す時、私達はlisten関数を使います。中にはパラメータがあります。例えば、sockete.listen(5)。この数字5はいったいどういう意味ですか?ネット上では多くの説がありますが、話は概念です。多くはコピー貼り付けで、誤解されやすいです。
答えを出す
具体的なコードセグメントを使って説明します。
これはパソコンのサービスとサービスをシミュレートするプログラムです。主な機能はsocket接続を確立した後、クライアントがキーワードを入力して対応する段数を調べ、サーバーが結果を返します。サーバーは同時に二つの顧客にサービスすることができます。このプログラムには信号量とマルチスレッドも含まれています。

listen(1)では、パラメータ設定を1にして説明しますが、パラメータ設定を1にしたら、3つのカスタマーサービスの接続を開くとエラーが発生しますか?わけではない
下図のように:

じゃ、問題が来ました。
問題1:
上の例のコードの中に、listen(1)がありますが、この1は何ですか?1つのsocketとリンクするしかないですか?なぜ私は上のコードで1つ以上のtcp接続を作成できますが、エラーが発生していません。もしネット上の他の人の言い方で理論的に1つ以上の接続はエラーを報告するべきです。
なぜなら、listen(n)が着信した値は、nはサーバが接続を拒否する(制限数を超える)前に、オペレーティングシステムが接続できる最大の接続数を表しているからです。nは「行列の数」とも考えられます。
問題2:
エラーがないのに、なぜユーザ3のアドレスが印刷されていませんか?
サーバはユーザ1とユーザ2を処理していますので、ユーザ3を接待する暇がありません。
問題3:
なぜサーバはユーザ1とユーザ2を同時に処理できるのですか?
なぜなら、

ここではマルチスレッドと信号量を用いて、信号量を2に設定し、つまり、合併数を2に設定し、サーバは2つのスレッドを開いて、ユーザ1とユーザ2を同時に処理することができます。
締め括りをつける

socket.listen(n)
簡単に言えば、ここのntはsocketの「列の数」を表します。
一般的に、一つのプロセスは一つのメインスレッド(つまり、シングルスレッド)しかないので、socketで許可される最大接続数はn+1サーバがマルチスレッドであれば、上のコード例は2スレッドが開いています。そうすると、socketで許可される最大接続数は、n+2言い換えれば、行列の人数(つまり、そのn)+食事中の人数(サーバで処理されているsocket接続数)=受け付けが可能な人数(socketで許可される最大接続数)です。
補足:Sockete.listen方法についての一点体悟
前言
最近ソケットに接触した時、その中のlistenの方法について理解できなくなりました。
詳しく説明する
まず、listen方法のPython 3.6文書の説明を見てみましょう。

socket.listen([backlog])
Enbale a server to accept connections.If backlog is specified,it must be at least 0(if it is lower,it is set to 0);it specifes the number of unaccepted connections that the system will allow before refusing nections.If not specifed、a default reasonable value is checsen.
接続を受け入れるためにサーバを有効にします。backlogsを指定するなら、少なくとも0でなければなりません。新しい接続を拒否する前に許可される未承諾の接続の数を指定します。指定されていない場合は、デフォルトの合理的な値を選択します。
Changed in version 3.5:The backlog parameter is now optional.
バージョン3.5で変更されました。Backlogパラメータは現在選択されています。
最初はこの説明を見ましたが、もちろんアクセスできるClient上限だと思いましたが、実践してみたらそうではないことが分かりました。ネットで探した解答は基本的には文書の復唱です。その後、専門家に教えてもらったら、これはソケットの下の知識に関連しています。
listen方法を知る前に、まずconnect方法とaccept方法を知る必要があります。以下は文書の説明です。

socket.connect(address)
Connect to a remote socket at address.(The format of address depends on the address family-see above.)
リモートソケットにアドレスを接続します。アドレスの書式はアドレス系列に依存します。上記を参照してください。
If the connection is interrupted by a signal、the method waits until the connection complectes、or rase a socket t.timeout on timeout、if the signal handler doesn't ration and the socket bloctimesong.the method rases an InterruptedErr exception if the connection is interrupted by a signal(or the exception ration sed by the signal handler)
接続が信号で中断された場合、この方法は接続が完了するまで待つか、または信号処理プログラムに異常が発生しておらず、ソケットがブロックされているか、またはブロックされている場合、タイムアウト時にsocket.timeoutを導入してタイムアウトします。非ブロッキングソケットの場合、接続が信号で中断される(または信号処理プログラムに起因する異常)場合、この方法はInterruptedErr異常を引き起こす。
Changed in version 3.5:The method now waits until the connection instead of rasing an Interrupteder exception if the connection by a signal the signal the signal handler doesn's the reextrextection
バージョン3.5で変更されました。この方法は接続が完了するまで待機しています。InterruptedErr異常を改善するのではなく、接続が中断された場合、信号処理プログラムは異常を起こさず、ソケットが詰まりまたはタイムアウトします。

socket.accept()
Accept a connection.The socket must be bound to an address and listening for connections.The return value is a pair(conn,address)where conn is a newcrest able to and receive data the and and the condrection of
接続を受信します。このsocketはアドレスと傍受接続を結びつけなければなりません。戻り値はペアです。ここでconnは新しいt 4>socketオブジェクトは接続上のデータの送信と受信に使用できます。addressは他端に接続されたソケットのアドレスです。
The newly created socket is non-inherityable.
新しく作成されたソケットはnon-inherityableです。
Chend in version 3.4:The socket is now n-inherityable.
バージョン3.4で変更します。ソケットは現在引き継げません。
Chend in version 3.5:If the system call is interrupted and the signal handler does not rase an exception、the method now retries the system cal instead of Rasing an Interrupteder exception(see PEP the.ration)
バージョン3.5で変更されました。システム起動が中断され、信号処理プログラムに異常が発生していない場合、この方法は、InterruptedErr異常PEP 475を誘発するのではなく、システム起動を再開します。
listen方法に比べて、二人は分かりやすくなりました。一つはServerを接続するためのCientの方法です。一つはServerがClientの接続申請を受信するための方法です。
しかし、実際にaccept方法は一回に1つのClientの接続申請しか受け付けられません。Clientは複数です。そうすると、ソケットはキューを設計してClientの接続申請を保存するのは当然です。そこでacceptはこの列からトップメンバーを抽出して処理すればいいです。
以下は概略図である。

このようにハッキリとしています。backlogパラメータの意味はこの列の最大値であり、接続申請を同時に受け付けている最大値です。backlogについては、この設定はどれぐらいですか?スカイnetから得られた参考は32です。満杯になればCient再connectが必要です。以上のlisten方法の謎が解けました。
以上は個人の経験ですので、参考にしていただければと思います。間違いがあったり、完全に考えていないところがあれば、教えてください。