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);