私は、非同期アプリケーションが、操作がスケジュールされているソケットを介していくつかのスレッドを実行し、非同期に実行しています。マルチスレッドソケットアプリケーションで同じfd番号の再利用を避ける
私は、一度ソケットを介して読み取り操作をスケジュールし、最初の操作が実行を開始する前にソケットが閉じられて(別の操作で他のピアによって)再開されると状況を回避しようとしています適切なファイル記述子が間違ったピアです。
問題は、(accept(); close(); accept())が両方のaccepts()で同じfdを返すため、上記の状況につながる可能性があります。
私はそれを避ける方法を見ることができません。
ヒント?
なぜ、あるスレッドのブロッキングが別のスレッドによって閉じられているのですか? –
非同期システムの性質は、あるオペレーションが読み込み、別の書き込みが実行され、別のオペレーションが終了し、すべてが異なるスレッドで実行される可能性があります。 –
あなたのアプローチについて考え直してください。通常、接続を受け入れる単一のスレッドがあり、それらを処理するスレッドが生成されます。これらのスレッドは接続を終了する責任があり、他のスレッドはその接続にもアクセスすることはありません。 –