2011-10-03 59 views
5

私は、複数のソケットをリッスンするCのlinux(red-hut)にシングルスレッドサーバーを作成しようとしています。受理エラー:リソースは一時的に利用できません

私は、私はこのような非ブロックにフラグを設定する場合、非ブロックソケットを使用する必要があります。

int flagss = fcntl(socketfds[j],F_GETFL,0); 
flagss |= O_NONBLOCK; 
fcntl(socketfds[j],F_SETFL,flagss); 

私が手:

ERROR on accept: Resource temporarily unavailable 

そうでない場合は、すべてが完璧に動作します。

答えて

12

リソースは一時的に利用できません。これは実際にはエラーではありません。それは、「私は今あなたのために答えを持っておらず、あなたは私に待ってはいけないと言ったので、ここで答えなしで帰ってきます。

リスニングソケットをノンブロッキングに設定した場合、接続しようとするクライアントがない場合、acceptはその値にerrnoを設定します。 select(従来型)またはpoll(意味のない同等の新しいインタフェース、古いUNIXでは実行しない場合は優先する)またはepoll(Linux固有の何千ものディスクリプタに最適化されたシステムコール)を使用して接続を待つことができます。

もちろん、リスニングソケットまたはデータソケットのいずれかのデータを待つためにpoll(またはその代替品)を使用します。

+1

ありがとうございます、私は選択を使用して動作しました – oznus

+1

暗黙の意味についての説明をありがとう! –

関連する問題