9.22 shutdown()
ソケットでのさらなる送受信を停止します。
9.22.1 書式
#include <sys/socket.h>
int shutdown(int s, int how);
9.22.2 解説
それだ!もうダメだ!このソケットではもう send() はできないが、recv() はまだしたい!その逆もしかり!どうすればいいんだ?
ソケット記述子を close() すると、読み書きのためのソケットの両側を閉じ、ソケット記述子を解放します。片方だけを閉じたい場合は、この shutdown() コールを使用することができます。
パラメータとして、s は当然このアクションを実行したいソケットで、どのようなアクションを実行するかは how パラメータで指定することができます。How は SHUT_RD でそれ以降の recv() を禁止したり、SHUT_WR でそれ以降の send() を禁止したり、SHUT_RDWR でその両方を禁止したりすることができます。
shutdown() はソケット記述子を解放しないので、ソケットを完全にシャットダウンしても、最終的には close() しなければならないことに注意してください。
これは、ほとんど使われないシステムコールです。
9.22.3 返り値
成功した場合は 0 を、エラーの場合は -1 を返します(それに応じて errno が設定されます)。
9.22.4 例
int s = socket(PF_INET, SOCK_STREAM, 0);
// ...do some send()s and stuff in here...
// and now that we're done, don't allow any more sends()s:
shutdown(s, SHUT_WR);