socket关闭的问题,shutdown 和close区别
close()和shutdown()函数 你已经整天都在发送 (send()) 和接收 (recv()) 数据了,现在你准备关 闭你的套接字描述符了。这很简单,你可以使用一般的 Unix 文件描述符 的 close() 函数: close(sockfd); 它将防止套接字上更多的数据的读写。任何在另一端读写套接字的企 图都将返回错误信息。 如果你想在如何关闭套接字上有多一点的控制,你可以使用函数 shutdown()。它允许你将一定方向上的通讯或者双向的通讯(就象close()一 样)关闭,你可以使用: int shutdown(int sockfd, int how); sockfd 是你想要关闭的套接字文件描述复。how 的值是下面的其中之 一: 0 – 不允许接受 1 – 不允许发送 2 – 不允许发送和接受(和 close() 一样) shutdown() 成功时返回 0,失败时返回 -1(同时设置 errno。) 如果在无连接的数据报套接字中使用shutdown(),那么只不过是让 send() 和 recv() 不能使用(记住你在数据报套接字中使用了 connect 后 是可以使用它们的)。 |