C++ 释放Boost.Asio(与赋值相反)或don'中的套接字;不转让所有权
Boost.Asio sockets中有一个函数赋值,不过我正在寻找类似的函数C++ 释放Boost.Asio(与赋值相反)或don'中的套接字;不转让所有权,c++,sockets,boost,boost-asio,C++,Sockets,Boost,Boost Asio,Boost.Asio sockets中有一个函数赋值,不过我正在寻找类似的函数 释放/取消分配,将套接字的所有权转移回用户 或 某些类型的赋值不会将所有权转移到套接字类,因此在销毁时不会关闭它 我知道,但它涉及到复制套接字(即创建新的描述符,而不是释放一个) 有人知道怎么做吗 编辑:没有这样的功能,打开了Boost.Asio的票证我在.hpp文件(Boost 1.35)中找不到任何这样的方法,因此我认为您必须自己修补Asio并添加一个release()方法。完成后,您可以自己保留补丁,将
- 释放/取消分配,将套接字的所有权转移回用户
- 某些类型的赋值不会将所有权转移到套接字类,因此在销毁时不会关闭它
编辑:没有这样的功能,打开了Boost.Asio的票证我在.hpp文件(Boost 1.35)中找不到任何这样的方法,因此我认为您必须自己修补Asio并添加一个
release()
方法。完成后,您可以自己保留补丁,将其发布到您的网站(或此处),或将其提交回Boost
试试Boost邮件列表。那里的人可能会告诉你这种方法是好是坏,以及为什么。如果你在那里发现什么有趣的东西,请在这里发布摘要
顺便说一句:Boost 1.42是昨天发布的。我在过去通过使用dup系统调用创建另一个文件描述符来实现这一点 int fd=dup(旧的_fd) socket.assign(…fd)
显然,它与释放描述符的语义不同,但当您需要将Boost.Asio放在承担描述符所有权的现有层之上或之下时,它工作得很好。完成后,您是否尝试将-1分配给套接字?我从来没有试过,但它可能有用。值得一试。我不认为这会起作用,因为在分配新的套接字时,套接字应该关闭现有的底层套接字。