accept
機能を使用してクライアントを受け入れるためのタイムアウトクロスプラットフォームソルーションは、ソケットを非ブロッキングに設定せずにありますか?タイムアウトでソケットを受け入れる方法
私はselect
の機能を使うべきだと知っていますが、間違っているのは何ですか?
SOCKET NativesAcceptClient(SOCKET s, int timeout)
{
int iResult;
struct timeval tv;
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(s, &rfds);
tv.tv_sec = (long)timeout;
tv.tv_usec = 0;
iResult = select(s, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
if(iResult > 0)
{
return accept(s, NULL, NULL);
}
else
{
//always here, even if i connect from another application
}
return 0;
}
これを修正するにはどうすればよいですか? ありがとう!
@ryanbworkいいえ、タイムアウトは10です – Boris
私の解決策を見ますか? – ryanbwork
はすぐに選択から飛び出していますか、または飛び出す前に10秒待っていますか(接続していない場合)? (Windows以外のプラットフォームで言及されているs + 1を除いて)うまくいきます。 – mark