Socket::close() 和 StreamSocket::shutdown() 之间的区别
Difference between Socket::close() and StreamSocket::shutdown()
当使用 Poco 的 StreamSocket
class 并且您想关闭套接字连接时,Poco 文档和函数实现都不清楚是 Socket::close()
还是 StreamSocket::shutdown()
将是最适合调用的函数。在这些似乎转发到 POSIX 函数的平台上,shutdown()
的手册页指出 sending/receiving 将被停止,但没有说明连接本身。我是否可以安全地假设 close()
本质上将成为 shutdown()
所做的超集,因此 close()
是更合适的调用?如果是这样,是否有一个示例场景,其中 shutdown()
是更合适的调用?
根据POCO's introductory slides on Network Programming:
POCO sockets are a very thin layer on top of BSD sockets
-- Slide #7
因此 POCO 套接字采用 BSD 套接字的语义 close()
和 shutdown()
。
如this SO answer (which refers to Beej's guide to network programming所述):
close()
将阻止远程套接字上的 reads/writes 而 shutdown()
使您可以更好地控制要切断的一端。 (这解释了 StreamSocket::shutdownSend()
and StreamSocket::shutdownReceive()
alongside StreamSocket::shutdown()
的存在)
编辑:请务必查看 Beej 指南关于 close()
.
实际效果的准确性
shutdown
函数关闭连接的发送端和/或连接的接收端。 close
函数只是关闭套接字,不一定对连接有任何影响。但是,如果连接没有引用(因为你 close
d 最后一个),那么操作系统将关闭连接。
当使用 Poco 的 StreamSocket
class 并且您想关闭套接字连接时,Poco 文档和函数实现都不清楚是 Socket::close()
还是 StreamSocket::shutdown()
将是最适合调用的函数。在这些似乎转发到 POSIX 函数的平台上,shutdown()
的手册页指出 sending/receiving 将被停止,但没有说明连接本身。我是否可以安全地假设 close()
本质上将成为 shutdown()
所做的超集,因此 close()
是更合适的调用?如果是这样,是否有一个示例场景,其中 shutdown()
是更合适的调用?
根据POCO's introductory slides on Network Programming:
POCO sockets are a very thin layer on top of BSD sockets
-- Slide #7
因此 POCO 套接字采用 BSD 套接字的语义 close()
和 shutdown()
。
如this SO answer (which refers to Beej's guide to network programming所述):
而 close()
将阻止远程套接字上的 reads/writes shutdown()
使您可以更好地控制要切断的一端。 (这解释了 StreamSocket::shutdownSend()
and StreamSocket::shutdownReceive()
alongside StreamSocket::shutdown()
的存在)
编辑:请务必查看 close()
.
shutdown
函数关闭连接的发送端和/或连接的接收端。 close
函数只是关闭套接字,不一定对连接有任何影响。但是,如果连接没有引用(因为你 close
d 最后一个),那么操作系统将关闭连接。