
現在、下記のようなクライアント、サーバ通信を行っております。
[クライアント]
(a)WSAStartup
(b)socket
(c)connect
(d)send(サーバへの要求送信)
(e)recv(サーバからの応答受信)
(f)shutdown
(g)closesocket
(1)プロセスは、常駐している
(2)(a)は初回起動時1回のみ
(3)通常(d)~(e)を周期的に行う
(4)(e)にて一定時間経過した場合、5秒待ち6回リトライし、それでもだめな場合は、(f)(g)を実施後(b)から処理を行う。この後、WSACleanupを行っていない。プロセス終了(exit)もしていない。
[サーバ]
(a)socket
(b)bind
(c)listen
(d)accept
(e)子プロセス生成
以下子プロセス処理
(f)select
(g)recv(クライアントからの要求受信)
(h)send(クライアントへの応答送信)
(1)親プロセス((a)~(e)を行うプロセス)は常駐している。子プロセス起動後、(d)でconnect待ちとなる。(クライアント側からの再接続待ち)
(2)子プロセスは、通常(f)~(h)の処理を行い、(f)又は(g)の異常時にexitする。
この処理で、クライアント処理(e)の一定時間経過後の再接続が正常に動作しない場合があります。
詳細情報を取得していませんが(現実的にすぐに詳細情報を取得することができない状況)(c)にて異常が発生していると思われます。
一度その状態になると二度と再接続できなくなり、マシン再起動(プロセス再起動)で復旧させることになります。
(実際は、マシン再起動後に再接続が正常になることを確認しています。(プロセス単体の再起動での確認はしていません。))
そこで質問ですが、
(1)再接続時、WSACleanupを行っていないが、問題ないか(処理の順番:(f)→(g)→(b))
(2)再接続前にプロセス終了(exit)していないが、問題ないか
(3)上記の作りで考えられる要因として、何があるか
ご教示して頂きたく、宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
WSAStartup()およびWSACleanup()は、プログラム中で1度呼び出せばOKです。
最初は上手く動くが、途中でこの状況に陥るということですか?
まず、クライアントかサーバのどちらで異常が発生しているのかを突き止めなければなりません。
クライアント側
・正しくclosesocketが行えているか?
・connect時にどんなエラーが帰っているのか?
WSAGetLastErrorで調べる
サーバ側
・正しくclosesocketが行えているか?
・子プロセスは正常終了しているか?
recvあたりでブロッキングされていないか。
http://www.usay.jp/
このサイトに、Socketerという通信エミュレートソフトがあります。
これを使ってサーバ、クライアントをエミュレートしてみてください。
また、エラーが発生していそうな部分で、WSAGetLastErrorを使ってエラーコードを取得してみてください。
参考URL:Winsock Error Code
参考URL:http://homepage1.nifty.com/yito/anhttpd/winsock_ …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 日本株 SBI証券HYPER SBI 2のエラー 1 2023/01/31 13:38
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- その他(パソコン・周辺機器) Windowsマシン。USBタップの「自動切れ、再接続」がうざい。解決策は? 7 2023/01/25 08:27
- 政治 私は文部科学省ヘ入り込んで投稿した私の建議文を彼らが私の依頼まましましょうか。? 2 2023/08/22 07:08
- フリーソフト AOMEI Backupper でバックアップが取れない 2 2022/07/17 22:28
- UNIX・Linux いつの間にか自宅サーバーが見れなくなっていた時のトラブルシューティング手順をご教示ください 4 2023/02/15 21:01
- 中古パソコン USBキーボードを外すと、起動できなくなる 2 2023/03/25 14:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
googleの2段階認証が設定でき...
-
プログラムの排他制御
-
タスクマネージャーのプロセス...
-
第三者に画面を同期するソフト...
-
ATコマンドがSYSTEM権限で実行...
-
Linuxでのスレッド間メッセージ...
-
Windowsでのfork方法
-
ADOでアクセスのレコードに...
-
プロセスIDからウィンドウハ...
-
explorer.exeが異様にメモリを食う
-
【C#】別プロセスがロックか...
-
共有メモリ方式とメッセージパ...
-
vb.netでEXCEL起動がうまくでき...
-
プロセスIDの取得方法について
-
IISがフリーズ
-
C言語 特定のプロセスの終了を...
-
特定ユーザーのプロセス情報を...
-
PCの動きが悪い。
-
スレッド?
-
共有メモリを使う場合のCPU負荷...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
VB6.0 SHELLで起動...
-
プロセスIDの取得方法について
-
C#でのbatファイル実行結果取得
-
タスクマネージャーのプロセス...
-
プロセスのアタッチ・デタッチ...
-
vb.netでEXCEL起動がうまくでき...
-
SendMessageが失敗するときがある
-
ADOでアクセスのレコードに...
-
非表示になったエクセルは?
-
explorer.exeが異様にメモリを食う
-
怪しいプロセス教えてください。
-
Process.Startの戻り値を後で取得
-
プロセスIDからウィンドウハ...
-
Linuxでのスレッド間メッセージ...
-
警告『 別のプロセスで使用され...
-
Visual C++からpingを実行して...
-
WSH.Runで待機できません
-
c言語でプロセスIDを調べたい
-
API関数 GetExitCodeProcess
おすすめ情報