广播数据包-大声说「Hello,World」

蝉沐风2022年10月16日
大约 1 分钟约 390 字

当你玩儿够了send()recv(),你可能想关闭你的socket descriptor连接了,这个操作很简单,只需要调用close()函数就可以了:

close(sockfd)

这将避免sockfd进行更多的读写操作,任何想要对这个socket进行读写的操作都会报错。

如果你想对socket关闭的姿势多一点控制,那你应该使用的是shutdown()函数,它允许选择性地切断单向连接或者双向连接(这一点和close()一样)。语法如下:

int shutdown(int sockfd, int how);

sockfd表示你想关闭的socket file descriptorhow的参数以及含义见下表:

how的值含义
0禁止接收数据
1禁止发送数据
2禁止接收、发送数据(和close()相同)

shutdown()成功时返回0,失败时返回-1,并且设置全局变量errno

如果你在unconnected datagram socket上使用shutdown(),它只会单纯地让socket无法继续进行send()recv()调用。如果你想让shutdown()发挥原本的作用,那么你应该把它用在使用了connect()函数的datagram socket身上。

需要强调的是,shutdown()并不会实际关闭file descriptor,只是改变了可用状态而已。想要真正释放file descriptor,你还是得调用close()

没了。

「对了,如果你用的是WindowsWinsock,你需要用的是closesocket(),而不是close(),谨记!」

上次编辑于: 2022/10/16 07:57:33
贡献者: chanmufeng
Loading...