boost-asio – 应该如何拆除boost :: asio :: ip :: udp :: sock
我已经阅读了boost asio参考资料,通过了本教程,并看了一些例子.不过,我无法看到插座应该如何拆除:
>我应该调用close()或者这是由socket的析构函数完成的吗? 解决方法
由于这是一个多问题,我会尽力回答每个部分,以满足您的需求:
1)我的经验是使用ASIO sockets,析构函数可以处理关闭套接字.但是,我只处理了TCP套接字.检查这个的最好方法是简单地看看析构函数的代码,看看它是否做了类似于关闭的事情.我知道Boost代码可能有点棘手,因此最简单的方法是创建一个打开UDP套接字然后将其破坏的示例程序.这样,您可以在调试器中逐步了解代码以遵循逻辑. 由于Boost的设计人员考虑到TCP套接字,所以我很难想象他们对UDP套接字不会这样做. 2)只有当您觉得有必要防止任何代码执行未来的recv和/或在套接字上发送时,才调用shutdown().这通常不是必需的,虽然我已经看到它在TCP套接字上使用,以强制套接字在关闭时发送RST(而不是默认的“正常”关闭,处理待处理发送). 3)您可以将套接字视为双向通信形式:一种用于阅读,另一种用于发送.您可以独立于另一个关闭任何一个,并且当另一个关闭时,您可以继续使用一个通道(即,关闭发送后仍然可以收到,反之亦然).关闭套接字与在recv和send上调用shutdown一样. 关闭recv只会阻止您的代码读取更多的数据.如果您尝试这样做,您将收到套接字错误.同样地,如果连接的另一端尝试向您发送数据,它将收到一个错误(对不起,重新切换到TCP世界,但我相信RST被回复给发送者). 关闭发送同样会阻止您的代码发送任何更多的数据.如果内存正确地服务于我,这看起来与当您关闭套接字时发生的情况(零长度数据包发送到另一端发出特定通道已关闭)相同.任何未来的发送尝试都会返回错误. 4)您必须检查您的文档才能确定. MSDN将给你一个很好的指示,虽然我不知道我认为它是权威的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |