
こんにちは。
早速ですが、ソケット通信について質問です。
複数クライアント(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で質問しましょう!
似たような質問が見つかりました
- その他(メールソフト・メールサービス) Thunderbird メール受信 できない時にエラーが欲しい 1 2023/05/26 15:07
- その他(メールソフト・メールサービス) メールが送信できない 発信側でできる対策 3 2023/05/11 10:22
- サーバー FTPサーバについて詳しい方(アクセス権のないディレクトリを非表示にする方法) 4 2022/08/22 22:33
- PHP PHP でメールフォームを作成したい 1 2022/05/04 22:28
- サーバー メールサーバーについて詳しい方、メールサーバーの管理業務経験のある方、教えてください。 3 2022/11/12 18:24
- ノートパソコン ESETの初期インストールの仕方 1 2022/10/14 08:26
- サーバー active directory のユーザをローカルで使いたい 1 2023/07/22 07:40
- ガラケー・PHS SMSメールの受信遅延原因はガラケー自体の欠陥では 8 2022/08/06 11:46
- 高校 私は今年22歳女性、未だに通信制高校休学中です。違う高校に入り直したいです。 閲覧ありがとうございま 8 2022/05/29 14:52
- その他(メールソフト・メールサービス) PCでメールは発信について 6 2022/08/13 09:23
この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
非ブロッキングソケットのrecvについて
C言語・C++・C#
-
7
ソケットでクライアントのipアドレスを取得できるそうですが・・・
C言語・C++・C#
-
8
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
9
ソケットのクローズについて
C言語・C++・C#
-
10
winsockの非同期処理について
C言語・C++・C#
-
11
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
12
socket: recvはいつ,どれだけ受け取るのか?
C言語・C++・C#
-
13
LRESULTとHRESULT
C言語・C++・C#
-
14
(マルチスレッド)_beginthreadexに複数の引数を渡す
C言語・C++・C#
-
15
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
16
ファイルやディレクトリの存在確認を行う方法
C言語・C++・C#
-
17
CStringをwchar_tに変換したい
C言語・C++・C#
-
18
ソケットを用いた1対多通信について1
Java
-
19
TCPでの非同期型select関数について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
TCPサーバ bind関数のエラーに...
-
【VBA】関数の宣言なしにプロシ...
-
ASP 0x80004005 クライアント...
-
EXECLマクロでshapeがグルーフ...
-
C# try-catch でcatchに飛ばす方法
-
エラー 'ASP 0115'
-
ASP更新・変更ができない
-
CreateObject("Excel.Applicati...
-
内部関数のエラーを外部に
-
画面のリフレッシュを意図的に...
-
ASP内で他のASPファイルを読み...
-
ネットワーク上のPCのIPとホス...
-
ペ-ジでエラ-が発生しました
-
asp.net でのドロップダウンリ...
-
エラー 'ASP 0115' について
-
winsock通信時エラーの回避
-
GridViewからテンプレートフィ...
-
CentOS6でyumコマンドやrpmコマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
vbscriptの変数宣言
-
TCPサーバ bind関数のエラーに...
-
VBSでIEを起動し、拡大率を変更...
-
VBSにてサーバー中のエクセルフ...
-
式はメソッドではありませんと...
-
名前が二重に定義されています
-
CreateObjectの同時実行時について
-
ASPでAccessのデータを更新、削除
-
VBA 関数(Function) カッコ...
-
誰かVisualBasicのデータフォー...
-
JScriptでアラートを表示するには
-
メール一括送信VBAへのアドレス...
-
EXCEL VBA API宣言でコンパイル...
-
1つの作業の制限時間を増やしたい
-
VisualStudioでXMLHTTPオブジェ...
-
EXCEL2010エラーVBA
-
submit できない
-
標準モジュールPublic宣言変数...
おすすめ情報