在Boost.Asio中释放套接字(与assign相反),或者不转移所有权

时间:2010-01-31 10:08:34

标签: c++ sockets boost boost-asio

Boost.Asio套接字中有一个函数赋值,但我正在寻找类似

的东西
  • 释放/取消分配,将套接字上的所有权转回给用户。

  • 某种类型的赋值不会将所有权转移到套接字类,因此在销毁时不会将其关闭。

我知道this solution但它涉及复制套接字(即创建新描述符而不是释放一个)。

有谁知道如何做到这一点?

修改:没有这样的功能,为Boost.Asio https://svn.boost.org/trac/boost/ticket/3900打开了票证

2 个答案:

答案 0 :(得分:1)

我在.hpp文件中找不到任何这样的方法(Boost 1.35),所以我认为你必须自己修补ASIO并添加release()方法。完成后,您可以自己保留补丁,将其发布到您的网站(或此处),或将其提交回Boost。

尝试Boost邮件列表。那里的人可能会告诉你这种方法是好是坏,为什么。如果您在那里找到任何有趣的内容,请在此处发布摘要。

BTW:昨天发布了1.42升。

答案 1 :(得分:1)

我过去通过使用dup系统调用来创建另一个文件描述符来完成此任务。

  

int fd = dup(old_fd)

     

socket.assign(... fd)

它显然没有与释放描述符相同的语义,但是当您需要将Boost.Asio层叠在假定描述符所有权的现有层之上或之下时,它可以很好地工作。