当使用Poco的StreamSocket
类并且您想要关闭套接字连接时,从Poco文档和函数实现中都不清楚Socket::close()
或StreamSocket::shutdown()
是否最合适打电话的功能。在这些似乎转发到POSIX函数的平台上,shutdown()
的手册页指出发送/接收将停止,但没有说明连接本身。我是否可以安全地假设close()
基本上是shutdown()
所做的超集,因此close()
更合适?如果是这样,是否有一个示例场景,其中shutdown()
将是更合适的呼叫?
答案 0 :(得分:2)
shutdown
功能会关闭连接的发送方,连接的接收方或两者。 close
函数只是关闭套接字,并不一定会对连接产生任何影响。但是,如果连接没有引用(因为你close
是最后一个),那么操作系统将关闭连接。
答案 1 :(得分:0)
根据POCO's introductory slides on Network Programming:
POCO插座是BSD插座顶部非常薄的层
- 幻灯片#7
所以POCO套接字对close()
和shutdown()
使用BSD套接字的语义。
正如this SO answer(提到Beej's guide to network programming)中提到的那样:
,而close()
将阻止远程套接字上的读/写shutdown()
可让您更好地控制哪一端被切断。 (这解释了StreamSocket::shutdownSend()
和StreamSocket::shutdownReceive()
以及StreamSocket::shutdown()
)
编辑:请务必查看David Schwartz's comment关于Beej指南有关close()
实际效果的准确性。