お世話になります。
早速ですが、SOKET通信について質問です。
socketやconnect等を使い、TCPクライアントのプログラムを作成しています。
クライアント <-LANケーブル1-> ハブ <-LANケーブル2-> サーバー
という構成でテストしています。
LANケーブル2を抜いた場合、クライアントで接続のエラーの検知が出来ません。
sendもエラーがかかりません。
ちなみにLANケーブル1を抜いた場合は検知できます。(select)
申し訳ありませんがよろしく御願いします。
はじめまして~、
私も勉強始めたばかりでよく分かってない部分が非常に多いのですがこれだけは
はっきりと分かります、いったいどうしてほしいのでしょうか??
エラー検出ができるようにしたいのでしょうか??(多分そうなんでしょうね)
接続エラーの方はなんでなるのかはよく分からんですが、send()のほうは
エラーなんていうものはないのでは??となっていると思います。
http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/cpref/html/frlrfsystemnetsocketssocketclasssendtopic
.asp
うわー、URLがなんかおかしい・・・、張りなおし~
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemnetsockets
socketclasssendtopic.asp
説明不足で申し訳ありません
補足させて下さい。
エラー検知をしたいのですが、
sendとは限らず、ステータスみたいな物がわかれば
それで何とかしたいと思っています。
sendでは、送信バイト数が正常にリターンされ
送信完了のようになってしまっています。
ちなみにこれも説明不足ですが、VC6.0SP5
です。
よろしく御願いします。
TCP/IP の知識とか全然ないんで的外れなことを言うかもしれませんが…
上記の例で言う場合、クライアント send はハブにデータを送り出すまでの責任しか持
たず、サーバにデータを送り届けるのはハブの責任なのではないでしょうか?
でなければ、インターネットなんつーのは地球の裏側のコンピュータにデータが届い
て、その応答が戻るまで send の制御が戻らないなんていうことに…ゾっとしますね。
相手状態等確認してから、TCPを利用ということをしたいのであれば
SNMP等を導入しないと無理ですね。
ただイリーガルな方法として
LANのコネクション断のタイムアウトを
短くすることでsocketがエラーとなり検出が可能になります。
(レジストリ操作が必要)
ただこれをするとシステム全体に影響する為
不穏な動作をします。
どうしてもそこの部分を検出したいなら次善の策としてポーリングを行うと言う
方法もあると思いますよ。内容は何でも良いのですが、固定の電文をサーバーへ
投げて、サーバーからその応答が一定時間内に帰ってくるかどうかで判断します。
但し、送り先のサーバーが死んでいて応答が帰ってこないのか、
途中の経路が断線していて応答が帰ってこないのかまでは判断できないでしょうね。
皆様回答有難うございます。
どうも無理なことを質問したようで、
申し訳ありません。
なぜ検知できないのかが理解できたので
有難うございました
