1

したがって、クライアントがソケットから読み取り、読み取りが 0 を返す状況を想像してください。これは、EOF またはサーバーが接続を閉じたことを意味します。

クライアントはこのファイル記述子に対しても close を呼び出す必要がありますか? クライアントが close を呼び出さない場合、ファイル記述子のリークが発生しますか?

4

1 に答える 1

2

はい、まだ閉じる必要があります。リモート ホストが接続を閉じた場合でも、ハンドルはマシン上に存在します。

read()ソケットを参照することはできます (接続自体が閉じられている場合でも、さまざまなメソッドを呼び出すことができます。ハンドルを呼び出しclose()た後は、ハンドルが完全になくなっているため、メソッドを呼び出すと、単に 0 を返すよりもセグメンテーション違反が発生する可能性が高くなります。

明確にするために。呼び出しclose()には 2 つのアクションがあります。

  1. 適切なパケットを送信して、ソケットが閉じたことをリモート ホストに通知します。
  2. そのソケットに関連付けられているメモリをクリーンアップします。

そのため、リモート ホストがソケットを閉じた場合でも、メモリをクリーンアップするために閉じる必要があります。

于 2013-05-01T15:30:42.003 に答える