限定しりとり

Windows上で動作するWinsock2を使用したサーバプログラムを作成し動かしているのですが「OSのスタンバイ→コントロールパネルからネットワーク接続の変更」を何度か繰り返していると不定期にサーバが強制終了してしまいます。
Winsockのバグなどで上記事象が発生しうる要因はありますでしょうか?
ちなみにそのサーバプログラムはユーザが要求するポート番号をLISTENし指定のサーバへリレーするのみの単純なものです。
コンパイラはVisual C++です。

よろしくお願い致します。

A 回答 (2件)

> 事象はReleaseでのみ発生します。



これは、困った状態ですね。
VC++のリモートデバッグを利用すると解決するかもしれません。
デバッグ版を動作させるのではなく、既に動作しているリリース版にリモートでアタッチできると思います。
VC6は、使用しなくなったので忘れてしまいましたが、VC.NETであれば、リリース版のプロセスにリモートでアタッチできました。またVC.NETでは、リリース版でもソースレベルで表示できました。
エディションによっては出来ないかもしれませんが・・・、できるとすればかなり有効です。ちゃんと例外もキャッチできましたよ。(C++ネイティブでしたが・・・)

> LINTEN中でネットワーク接続・・・SOCKETの情報が変わることはあるのでしょうか?

ごめんなさい。これはちょっと自信有りません。
ただ、ネットワーク接続の変更によってサーバが落ちるのであれば、何らかの関係はありそうですね。
    • good
    • 0
この回答へのお礼

リモートでのアタッチは試してみる価値がありそうですね。早速試してみます。
当初はWinsockのバグと思っていたんですが...。
setsckopt()でのSO_REUSEADDRのバグなどサーバサイドでのバグがいくつか報告されていたので。
見切りが早かったですね。

お礼日時:2004/11/16 18:29

サーバが強制終了?とは、サーバプログラムがOSから終了させられる?と言うことですよね?


サーバ機やOS等は無事なんですね。

Winsockのバグを考える前に、なぜ強制終了させられるのかを調べる方が先決と思います。
そこそこの開発環境を使っていればブレークポイントや例外発生時に止めることが出来ると思いますので、そこを先に確かめましょう。

LISTENしている最中にネットワーク接続が変更されるわけですから、当然異常動作となります。
エラー処理を重点的に確認してみてはいかがでしょうか?
C++ならtry catchで例外も受け止められます。

この回答への補足

>Winsockのバグを考える前に、なぜ強制終了させられるのかを調べる方が先決と思います。
そこそこの開発環境を使っていればブレークポイントや例外発生時に止めることが出来ると思いますので、そこを先に確かめましょう。

デバッガを使用しての検証は何度か行ったのですが、事象が再現しないんです。
当然、DebugとReleaseの違いはあるとは思うんですが、不定期に発生するので、事象発生時の情報のトレースができていないのが現状です。(事象はReleaseでのみ発生します。)


>LISTENしている最中にネットワーク接続が変更されるわけですから、当然異常動作となります。
エラー処理を重点的に確認してみてはいかがでしょうか?
C++ならtry catchで例外も受け止められます。

LINTEN中でネットワーク接続の変更によってLISTENしているSOCKETの情報が変わることはあるのでしょうか?
個人的にはクライアントからのリクエストが無い限りSOCKETの情報が変わることは無いと思ったのですが、勘違いだったらすいません。

補足日時:2004/11/16 12:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!