
こんにちは。
早速ですが、ソケット通信について質問です。
複数クライアント(Win)からサーバ(UNIX)に対して、connect()し、サーバ側はaccept()したら、それぞれに対しfork()で子プロセスを作っています。
そこで、50台くらいのクライアントから一気にconnect()すると通信エラーとなってしまうのですが、なにか制限があるのでしょうか?
connect()のタイミングをずらせば、それぞれのクライアントとサーバの子プロセスでやり取りができます。
一斉にconnect()される場合の通信エラーの原因や対処法などをご教授願います。
初歩的なことかもしれませんが・・・。
よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
エラーの内容が不明なのではっきりしたことは言えませんが、Spiraさんの言うようにlisten()の引数が一つの原因ではあるかもしれません。
この引数はbacklogといってデフォルトでは5程度になっています。これはどういう意味かというと、listenしているポートに対しacceptがコールされるまで待ってくれる最大数を意味し、つまりacceptされないconnect要求が5個溜まると、それ以後は即座にconnect関数が失敗することになります。従ってlisten(50)としてやれば一応の解決にはなるでしょう。ただ、サーバ側の処理としてはできるだけすぐにacceptしてやるべきで、backlogを大きくとるのはあまり上手なプログラムではありません、、、がんばって下さい。詳しい説明ありがとうございます。
listenの引数は100を設定していました。
acceptではなく、forkで異常になっているようでした。
errnoは10のようですが、もう少し調べてみます。
ありがとうございました。
No.2
- 回答日時:
listen()の引数に同時に処理(保留)できるコネクション数を設定できたような気がします。
(覚えてない…)この値を増加させてみたらいいのではないでしょうか?
この値はあくまでも【同時】に接続要求がきた場合のことなので、パラパラと接続要求がくるぶんには関係ありません。お尋ねの現象と合致するような気がします。
お礼が遅くなりました。
listenの第2パラメータには100を設定しています。
しかし、100台もつないでいないため、違う原因かと思っています。
また、acceptではなく、forkで異常になっているようでした。
errnoは10のようですが、もう少し調べてみます。
ありがとうございました。
No.1
- 回答日時:
最大ソケット数というのはありますが
しかし50台とかそんな小さい数字ではないはず。
でもかならず51台目にかならずコネクションがはれないのであれば
サーバーがそういう制限をかけたソースなのでは?
acceptが失敗しているんですよね?
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
acceptがなんでエラーがでているのかを調べてください。
お礼が遅くなりました。
acceptではなく、forkで異常になっているようでした。
errnoは10のようですが、もう少し調べてみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ソケット通信で接続クライアントの上限を設ける
C言語・C++・C#
-
ソケット通信 同じポート番号でn対1はできない?
C言語・C++・C#
-
Winsockで接続待ちタイムアウトを設定する方法
C言語・C++・C#
-
-
4
ネットワーク切断を検出するには?
C言語・C++・C#
-
5
acceptをalarmでタイムアウトさせる処理がうまくいきません
C言語・C++・C#
-
6
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
7
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
8
リストコントロール(MFC or API)の最後尾にアイテムを追加するには?
C言語・C++・C#
-
9
ソケットのクローズについて
C言語・C++・C#
-
10
winsockの非同期処理について
C言語・C++・C#
-
11
socket: recvはいつ,どれだけ受け取るのか?
C言語・C++・C#
-
12
エディットボックスで改行
その他(プログラミング・Web制作)
-
13
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
14
エディットボックスの入力制限について
C言語・C++・C#
-
15
非ブロッキングソケットのrecvについて
C言語・C++・C#
-
16
TCPでの非同期型select関数について
C言語・C++・C#
-
17
ソケットでクライアントのipアドレスを取得できるそうですが・・・
C言語・C++・C#
-
18
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
19
ソケットを用いた1対多通信について1
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCEL VBA API宣言でコンパイル...
-
TCPサーバ bind関数のエラーに...
-
ネットワーク上のPCのIPとホス...
-
fopenでエラーとなる
-
Response.Redirectで引数2つの...
-
IIS7.5の設定の仕方
-
WindowsでS.M.A.R.Tの情報取得...
-
エラー 'ASP 0115' について
-
FileCopy時のエラー
-
VB6でのPL/SQLの実行について
-
ページを一度更新しないとSessi...
-
ASP内で他のASPファイルを読み...
-
[VB6.0] Inet OpenURLのエラー検出
-
Panelを重ねる方法
-
ページの更新内容が反映されない。
-
クリッカブルマップを利用したA...
-
WinXPProにVC++6.0をイン...
-
Global.asaxで Server.CreateOb...
-
オーバーフローが発生します
-
[PL/SQL]REFCURSORが戻り値のプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
式はメソッドではありませんと...
-
名前が二重に定義されています
-
TCPサーバ bind関数のエラーに...
-
ASPでAccessのデータを更新、削除
-
EXCEL VBA API宣言でコンパイル...
-
VBSにてサーバー中のエクセルフ...
-
VBSでIEを起動し、拡大率を変更...
-
CreateObjectの同時実行時について
-
VBSについて
-
ACCESSのAutoKeysマクロでアク...
-
submit できない
-
ネットワーク上のPCのIPとホス...
-
C# try-catch でcatchに飛ばす方法
-
ASPプログラミングでADODB.C...
-
EXECLマクロでshapeがグルーフ...
-
Response.Redirectで引数2つの...
-
画面のリフレッシュを意図的に...
-
FileCopy時のエラー
おすすめ情報