>>800
サーバからCloseを発行して、クライアント側ではrecvで0が返ったことを
確認してcloseすればクライアントはTIME_WAITには入らないから大丈夫。

ただし正常系はそれでいいが、例えばサーバが無応答になった場合など、
クライアントから切断せざるをえない場合も発生するよ。

切断用の電文は、>>801のいうように切断したい接続上でやりとりすれば
いいと俺も思う。バイナリを大量に転送中で中断が難しいような場合だと、
転送用の接続と、コマンド用の接続を分けるというのも確かにやるけど(FTPみたいに)。