したがって、クライアントがソケットから読み取り、読み取りが 0 を返す状況を想像してください。これは、EOF またはサーバーが接続を閉じたことを意味します。
クライアントはこのファイル記述子に対しても close を呼び出す必要がありますか? クライアントが close を呼び出さない場合、ファイル記述子のリークが発生しますか?
したがって、クライアントがソケットから読み取り、読み取りが 0 を返す状況を想像してください。これは、EOF またはサーバーが接続を閉じたことを意味します。
クライアントはこのファイル記述子に対しても close を呼び出す必要がありますか? クライアントが close を呼び出さない場合、ファイル記述子のリークが発生しますか?
はい、まだ閉じる必要があります。リモート ホストが接続を閉じた場合でも、ハンドルはマシン上に存在します。
read()
ソケットを参照することはできます (接続自体が閉じられている場合でも、さまざまなメソッドを呼び出すことができます。ハンドルを呼び出しclose()
た後は、ハンドルが完全になくなっているため、メソッドを呼び出すと、単に 0 を返すよりもセグメンテーション違反が発生する可能性が高くなります。
明確にするために。呼び出しclose()
には 2 つのアクションがあります。
そのため、リモート ホストがソケットを閉じた場合でも、メモリをクリーンアップするために閉じる必要があります。