No.1
- 回答日時:
理論的には接続数の制限はないはずですが
サーバ側の負荷などの方が問題になってくるのではないかと思います
Windows共有などは↑の理由で接続制限を付けているだけでしょう
そんなものがあったら 一定接続されたホームページなどには
他の人がアクセスできないということになります
(HTTPに限った話ではないが例としてわかりやすいと思うので)
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で質問しましょう!
似たような質問が見つかりました
- モニター・ディスプレイ 識別番号の決まり方 1 2022/06/14 20:44
- ダイヤルアップ Raspberry Piでアナログモデム経由で音声再生 1 2022/05/20 18:01
- その他(パソコン・周辺機器) Windowsマシン。USBタップの「自動切れ、再接続」がうざい。解決策は? 7 2023/01/25 08:27
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- Windows 10 リモートデスクトップ接続 1 2022/07/12 14:30
- ルーター・ネットワーク機器 ひとつのスイッチでルーターの冗長化を複数させたい 1 2023/04/12 22:46
- その他(ソフトウェア) Microsoft Store Guitar Pro購入後の質問 1 2022/08/11 17:15
- カスタマイズ(車) いわゆる「テレビキャンセラー」について・・・・・ 7 2022/11/01 20:57
- デスクトップパソコン 動画編集やフォトショップ、イラストレーターなど、このスペックで問題ないですか? 7 2022/08/19 18:10
- Windows 10 windows11のUSB接続の機器がcomポートに表示されない。 3 2023/04/13 07:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VirtualBoxのGuestマシンのネッ...
-
スリープモードについて
-
SSH接続をキー入力の有無でタイ...
-
クロームキャストについて質問...
-
ServerとNASの裏LANについて
-
fetchがつながらない!
-
FFFTPが繋がりません
-
SFTPで仮想サーバに接続できません
-
至急) mac finderの場所 ネット...
-
(SSH)TeraTermでのリモートログ...
-
初期型AirMacでケイオプティコ...
-
sshのタイムアウト設定
-
AS400データをCSVやテキスト...
-
Hyper-V Windows7へのWeb接続法
-
Windows7 ネットワーク接続が切...
-
SSHでリモートログインした時に...
-
Mac mini Server でVPN接続
-
同一ポート番号ソケットOPE...
-
パスワード設定していないユー...
-
リモートデスクトップ接続でパ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VirtualBoxのGuestマシンのネッ...
-
Real VNCが頻繁に切断されます
-
TortoiseSVNでアクセスエラー
-
AS400データをCSVやテキスト...
-
SFTPで仮想サーバに接続できません
-
至急) mac finderの場所 ネット...
-
FW機器を交換したらサーバ応答...
-
net use接続時のネットワークド...
-
サブネットに分割したらnslooku...
-
(SSH)TeraTermでのリモートログ...
-
接続先のIPを知る方法
-
クロームキャストについて質問...
-
同一ポート番号ソケットOPE...
-
Macスリープ中にHDDが動いてしまう
-
FTPのアップロートとダウンロー...
-
固定IPアドレスでもリンクアッ...
-
Mac OS9 ファイル共有のやりかた
-
リモートデスクトップのアクセ...
-
FFFTP、filezllaに詳しい方教え...
-
Tera Term Pro からリモートロ...
おすすめ情報