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 パラメータで指定することができます。HowSHUT_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);

9.22.5 参照

close()