
No.2ベストアンサー
- 回答日時:
接続されるサーバ側で考えて見ます。
TCP/IPの仕様として、ザックリと簡単にいえば、一度に使えるポートは1つのみで、
すでに使用されているポートを排他する仕様があります。
たとえばWebサーバを作るとき、すでに別のアプリで80番ポートがリスナとして開かれていると、
そのポートに実際のセッション(接続状態)が無くてもエラーになったりします。
これは、そのポートを先に開いていた接続が閉じた後も待機状態にあるためで、
ただしクライアントが先に閉じると(FIN)、待機状態にはなりません。
この仕様によって、80番を使っている別のサーバを落としたのに、
同じ80番を使おうとしている自身のアプリでポートが開けたり開けなかったりすることが生じます。
しかし接続は閉じているのだから何とかして使いたいですよね。
この待機状態を自身のアプリで利用可能にするための方法があります。
サーバ側のアドレスをソケットにbindする前にSO_REUSEADDRオプションを設定すると、
同じポートを再利用可能にすることができます。
また、OSが提供するAPI上の制約もあります。
サーバ側では、listen (Win32ではプロバイダ側のWSPListen)に指定するバックログというパラメータがあります。
この値はリスニング中に待機させることができるキューのクライアント接続数です。
これを超える数のクライアント接続は失敗します。
Windowsでは仕様上はSOMAXCONN(128)が上限ですが、Windowsのバージョンやエディション、ネットワークドライバの仕様などによっては5以下に制限されることもあり、この値より大きい値は指定できません。
これでは制限がありすぎて使い物にならない、という気がしますね。
しかし、受諾したクライアントのソケットアドレス(アドレスとポート番号のペア)は、
実は二重化(コピー)して使うことができ、元の接続を閉じることができるのです。
このコピーを使用すると、クライアントとの送受信をスレッドとして分離して非同期に行うことができるので、受諾したソケットアドレスはコピーしてスレッドに引き渡したら、元のソケットハンドルを閉じて次のリスンを開始することができ、これによってバックログのサイズはごく小さくすることできます。
これらの手法を使うことによってサーバプロセスでは、
1つしかないポートを複数のプロセスやスレッドで分散し処理するしくみが作れるようになっています。
お役に立てれば幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Macで、Bluethで使用しているマ...
-
0000docomoに「接続済み」なの...
-
MacBook Air かMacBook
-
iMac起動時のエラーメッセージ
-
プレミアプロを立ち上げても英...
-
mac ファイルの詳細情報を編集...
-
MacBookのnumbersでの表作成に...
-
MacにもAutoHotkey(windows)の...
-
MacでGoogle手書き入力が使いたい
-
とても速いと言われるM4iMacの...
-
新発売したiMacは英語バージョ...
-
Mac mini
-
MacBookの音声入力ができなくな...
-
iMacのモニターを使って
-
iMacをMacMiniのモニターとして...
-
macOS Sonoma 14.1をインストー...
-
プレミアプロが起動しません;...
-
MacBookのシステムデータを減ら...
-
YouTubeの動画画面が360pより大...
-
Airdrop で写真を転送すると
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Macで、Bluethで使用しているマ...
-
MacBookのnumbersでの表作成に...
-
MacBook Air かMacBook
-
MacにもAutoHotkey(windows)の...
-
mac ファイルの詳細情報を編集...
-
今年もアップルの新製品発表が...
-
プレミアプロを立ち上げても英...
-
Microsoft office 2019 for mac...
-
iMacのモニターを使って
-
動画編集でPremier Proを使って...
-
Mac メールドレスのコピペが出...
-
プレミアプロが起動しません;...
-
iMac起動時のエラーメッセージ
-
macOS Sonoma 14.1をインストー...
-
MacBookのシステムデータを減ら...
-
macを再インストールしたら、オ...
-
iMacをデュアルモニタ(外部ディ...
-
2012年製のiMacを譲って頂いた...
-
imac 2012を中古で購入しました...
-
iMacをMacMiniのモニターとして...
おすすめ情報