標準のソケット呼び出しを使用するC++アプリケーションがあり、データを送受信しないでソケットがまだ開いているかどうかを知ることができますか?信頼できるselect
またはioctlsocket
コールがありますか?ソケットがまだ開いていることを確認する方法はありますか?
答えて
1バイトを受信しようとすると、いくつかのエラーを受信することができます。ノンブロッキングソケットを使用し、有効な接続で受信しようとすると、WSAEWOULDBLOCKエラーが発生します。
あなたはタイムアウトまたは切断のためのいくつかの他のエラーを返すことがありreturn value of recvのrecvから見ることができるように、私はWSAEWOULDBLOCKが、それはかもしれない唯一の値である信じて、我々はそう
bool connected(SOCKET sock)
{
char buf;
int err = recv(sock, &buf, 1, MSG_PEEK);
if(err == SOCKET_ERROR)
{
if(WSAGetLastError() != WSAEWOULDBLOCK)
{return false;}
}
return true;
}
のような非ブロッキングソケットを確認することができ、これを知りますエラーがあっても接続されていればリターンしますが、戻り値のリストを再度チェックしたいかもしれません。また、recv(MSG_PEEK)で使用されているフラグは、チェックの後に表示するときにデータが読み込み可能であることを意味します。したがって、1バイトのデータを失うことを心配する必要はありません。
これはデータを受信するまでブロックされる可能性があるため、非ブロッキングソケットでのみうまくいくと思います。ブロッキングソケットを使用する場合は、このチェックの前にioctlsocketで非ブロックを設定し、それを元の状態に戻すことができます。
ソケットをブロックするには、selectを使用します。 –
ソケットが「開いている」とは、エンドツーエンドの接続には役立ちません。あなたが相手と通信できることを確かめるための唯一の方法は、相手の側と通信することです。
設計するプロトコルでこのチェック動作を実装することを検討する必要があります。それがあなたのプロトコルではない場合、時にはそれを巧妙に行う方法があります(例えば、FTPポートが両方とも開いているかどうかを確認するために、非常に小さくて無駄なファイルをFTPします)。
- 1. posixソケットがまだ有効であることを確認する方法
- 2. JSがPHPだけをロードしていることを確認する方法はありますか?
- 3. ファイルが既に開いているかどうかを確認する方法はありますか?
- 4. 変数がどこから来ているかを確認する良い方法はありますか?
- 5. ソケットがPHPで開いているかどうかを確認するには?
- 6. jinja2テンプレートで変数が変更されていることを確認する方法はありますか?
- 7. 強制停止が呼ばれていることをアンドロイドで確認する方法はありますか?
- 8. Firebugがブラウザにインストールされていることを確認する方法はありますか?
- 9. プロパティが設定されていることを確認する方法はありますか?
- 10. Kerberosが使用されていることを確認する方法はありますか?
- 11. ソケットサーバーが開いていることを確認するには?
- 12. 数字が正であることを確認する良い方法はありますか?
- 13. 2つのフロートが正確に等しいことを確認する方法はありますか?
- 14. コミットの内容を確認する方法はまだありますか?
- 15. ファイルがまだ開いているかどうかを確認する
- 16. すべてのctypeにargtypeがあることを確認する方法はありますか?
- 17. 戻り値のないストアドプロシージャが実行されたことを確認する方法はありますか?
- 18. ポートが開いていることを確認してください
- 19. ANTでポートが開いていることを確認してください
- 20. material2 sidenavが開いていることを確認してください
- 21. Excelブックが開いていることを確認しますか?
- 22. AppEngine Channel API - チャンネルがまだ開いているかどうかを確認する最善の方法(サーバー側)
- 23. jqueryで選択要素がまだ開いているかどうかを確認する方法
- 24. CNContactがお気に入りであることを確認する方法はありますか?
- 25. ユーザーがWikipediaのユーザーであることを確認していることを確認しますか?
- 26. UIViewControllerが表示されているかどうかを確認する良い方法はありますか?
- 27. ユーザーが購読しているかどうかを確認する正しい方法はありますか?
- 28. POSTパラメータを確認するより良い方法はありますか?
- 29. ウェブページがまだ存在するかどうかを確認する春の方法はありますか?
- 30. Laravel - (SSH)ソケットが生きているかどうかを確認する方法?
ソケットがもう一方の端で閉じられているかどうかを確認していますか? –
はい。私のアプリケーションはWindows上で動作し、PCが休止状態になっているときに、ソケットが返ってきたらもう片方がそれを閉じて(そして私のアプリケーションが中断されているので、私は通知を受け取らないので)ソケットはもはや有効ではないかもしれません。 – Rob