こんにちは。
早速ですが、ソケット通信について質問です。
複数クライアント(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
TCP/IPポートの最大接続数は
ハッキング・フィッシング詐欺
-
5
ソケットのrecvの戻り値が0
C言語・C++・C#
-
6
ODBC経由の処理が遅い
SQL Server
-
7
UDP通信する時に、相手にどうやって自分のポート番号を教える?
Java
-
8
winsockでソケット通信の開発をしていますが、
C言語・C++・C#
-
9
TCP/IP通信時のサーバーからの受信
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
C# try-catch でcatchに飛ばす方法
-
Response.Redirectで引数2つの...
-
FileCopy時のエラー
-
fopenでエラーとなる
-
VBSからのサーバサイドのEXEの実行
-
VBSからPDFファイルを開きたい...
-
Outlookで添付ファイルの有無を...
-
winsock通信時エラーの回避
-
CreateObject("Excel.Applicati...
-
エラー内容について
-
VB6でのPL/SQLの実行について
-
[PL/SQL]REFCURSORが戻り値のプ...
-
ASPへのデータの受け渡しについて
-
オーバーフローが発生します
-
ASPからACCESS200...
-
このページの状態情報は無効で...
-
ASPからWscriptを利用して外部...
-
パケットの書込みエラーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 宣言Dimの場所
-
ソケット通信で同時受信の制限?
-
VBSにてサーバー中のエクセルフ...
-
vbscriptの変数宣言
-
VBSでIEを起動し、拡大率を変更...
-
TCPサーバ bind関数のエラーに...
-
式はメソッドではありませんと...
-
golang 空文字判定について
-
名前が二重に定義されています
-
ACCESSのAutoKeysマクロでアク...
-
CreateObjectの同時実行時について
-
EXCEL VBA API宣言でコンパイル...
-
SumIFsとDateSerial vba
-
ASPエラー時の内容を任意で...
-
エクセル同一セル内の指定文字...
-
COBOLのPERFORM文
-
C# try-catch でcatchに飛ばす方法
-
FileCopy時のエラー
-
Response.Redirectで引数2つの...
-
EXECLマクロでshapeがグルーフ...
おすすめ情報