以下のサーバーコードでソケットを呼び出した後、「開いているファイルが多すぎます」というエラーが表示されます。このコードは繰り返し呼び出され、server_SD が値 1022 を取得した直後にのみ発生します。そのため、「ulimit -n」で禁止されている 1024 の制限に達していると想定しています。私が理解していないのは、ソケットを閉じていることです。これにより、fd が再利用可能になるはずですが、これは起こっていないようです。
注: Linux を使用していて、クライアントも閉じています。いいえ、私は root ユーザーではないため、制限を移動することはできません。一度に最大 20 個 (またはそれくらい) のソケットを開く必要があります。私のプログラムの存続期間中に、1000000 近くのソケットを開いたり閉じたりすることが予想されます (したがって、非常に強力に再利用する必要があります)。
server_SD = socket (AF_INET, SOCK_STREAM, 0);
bind (server_SD, (struct sockaddr *) &server_address, server_len)
listen (server_SD,1)
client_SD = accept (server_SD, (struct sockaddr *)&client_address, &client_len)
// read, write etc...
shutdown (server_SD, 2);
close (server_SD)
閉鎖と再利用性を保証する方法を知っている人はいますか?
ありがとう。