• ベストアンサー

C言語でのソケット通信のclose

C言語でソケット通信をするプログラムの見本は、大体がサーバのプログラム内でサーバとクライアントのファイルディスクリプタを、クライアントのプログラム内でクライアントのファイルディスクリプタをcloseしてから終了しています。 でも、プログラムを終了させる時にopenしているファイルディスクリプタは自動的にcloseされるのだから、わざわざ明示的にcloseする必要がないと思います。 「明示的にcloseするのがマナーだから」という理由しか、調べても出てきませんでした。 明示的に全てのファイルディスクリプタをcloseする理由をご存知の方、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.1

普通のアプリケーションは、終了するまでソケットを開きっぱなしということはなく、終了する前のどこかの段階で閉じたり、また開いたりします。 ということは、サンプルはソケットを閉じる方法を教えるべきです。 サンプルは教えるためのものであって、完成されたプログラムではありませんから、目的を見失って重箱の隅をつついても意味がありません。実践ではどうなるかを考えましょう。

bcbcbc
質問者

お礼

なるほど。納得です。 ありがとうございました。

その他の回答 (1)

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.2

特定のOS、特定の言語に限ったことではないですが、 一般に、closeすると出力バッファにあるものを送ってからプログラム終了となりますが、 closeしないと出力バッファにたまっているデータが送られないまま プログラムが終了してしまうものがあるためです。

bcbcbc
質問者

お礼

なるほど、知らなかったです。 ありがとうございました!

関連するQ&A