22

C(Linux Ubuntu)でのソケットプログラミングの somaxconn がよくわかりませんでした。いくつかのサイトを検索しましたが、どれもあまり役に立ちませんでした。

listen(sockfd,SOMAXCONN);

これは最大数まで同時に聞くことを意味しますか。接続されたソケットの?

4

2 に答える 2

19
#include <sys/socket.h>

int listen (int socket, int backlog);

backlog 引数は、実装がソケットのリッスン キュー内の未解決の接続の数を制限するために使用するヒントを実装に提供します。実装は、バックログに制限を課し、指定された値を静かに減らすことができます。通常、backlog 引数の値が大きいほど、リッスン キューの長さが大きくなるか、等しくなります。実装はSOMAXCONN、 で定義されている までのバックログの値をサポートするものとし<sys/socket.h>ます。

listen()が 0 未満のバックログ引数値で呼び出された場合、関数はバックログ引数値 0 で呼び出されたかのように動作します。

バックログ引数が 0 の場合、ソケットは接続を受け入れることができます。この場合、リッスン キューの長さは実装定義の最小値に設定されます。

ここに見られるように。

于 2013-08-06T06:54:19.037 に答える
13

簡単に言えば、バックログは、ソケットで必要なキューに入れられた接続の最大数です。このキューは、クライアントからの接続を処理できるようにするためのもので、他の人が並んで待っている間、バックログは、この行をどれだけ長くしたいかを指定します。バックログよりも多くのクライアントがサーバーに接続しようとすると、それらの接続はドロップされます。

SOMAXCONN私のシステム上にlisten()ある、あなたが渡すことができる最大数を定義します。128

詳細については、man ページを参照してください。

于 2013-08-06T07:07:40.527 に答える