加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

boost-asio – 应该如何拆除boost :: asio :: ip :: udp :: sock

发布时间:2020-12-16 05:52:15 所属栏目:百科 来源:网络整理
导读:我已经阅读了boost asio参考资料,通过了本教程,并看了一些例子.不过,我无法看到插座应该如何拆除: 我应该调用close()或者这是由socket的析构函数完成的吗? 什么时候应该关闭shutdown() shutdown()有什么影响? 我知道它是“禁止发送或接收”,但是怎么做呢
我已经阅读了boost asio参考资料,通过了本教程,并看了一些例子.不过,我无法看到插座应该如何拆除:

>我应该调用close()或者这是由socket的析构函数完成的吗?
>什么时候应该关闭shutdown()
> shutdown()有什么影响?
我知道它是“禁止发送或接收”,但是怎么做呢?如果我在禁用后发送或接收套接字,该怎么办?
>我可以从close()中预期哪些错误

解决方法

由于这是一个多问题,我会尽力回答每个部分,以满足您的需求:

1)我的经验是使用ASIO sockets,析构函数可以处理关闭套接字.但是,我只处理了TCP套接字.检查这个的最好方法是简单地看看析构函数的代码,看看它是否做了类似于关闭的事情.我知道Boost代码可能有点棘手,因此最简单的方法是创建一个打开UDP套接字然后将其破坏的示例程序.这样,您可以在调试器中逐步了解代码以遵循逻辑.

由于Boost的设计人员考虑到TCP套接字,所以我很难想象他们对UDP套接字不会这样做.

2)只有当您觉得有必要防止任何代码执行未来的recv和/或在套接字上发送时,才调用shutdown().这通常不是必需的,虽然我已经看到它在TCP套接字上使用,以强制套接字在关闭时发送RST(而不是默认的“正常”关闭,处理待处理发送).

3)您可以将套接字视为双向通信形式:一种用于阅读,另一种用于发送.您可以独立于另一个关闭任何一个,并且当另一个关闭时,您可以继续使用一个通道(即,关闭发送后仍然可以收到,反之亦然).关闭套接字与在recv和send上调用shutdown一样.

关闭recv只会阻止您的代码读取更多的数据.如果您尝试这样做,您将收到套接字错误.同样地,如果连接的另一端尝试向您发送数据,它将收到一个错误(对不起,重新切换到TCP世界,但我相信RST被回复给发送者).

关闭发送同样会阻止您的代码发送任何更多的数据.如果内存正确地服务于我,这看起来与当您关闭套接字时发生的情况(零长度数据包发送到另一端发出特定通道已关闭)相同.任何未来的发送尝试都会返回错误.

4)您必须检查您的文档才能确定. MSDN将给你一个很好的指示,虽然我不知道我认为它是权威的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读