Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 释放Boost.Asio(与赋值相反)或don'中的套接字;不转让所有权_C++_Sockets_Boost_Boost Asio - Fatal编程技术网

C++ 释放Boost.Asio(与赋值相反)或don'中的套接字;不转让所有权

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 sockets中有一个函数赋值,不过我正在寻找类似的函数

  • 释放/取消分配,将套接字的所有权转移回用户

  • 某些类型的赋值不会将所有权转移到套接字类,因此在销毁时不会关闭它
我知道,但它涉及到复制套接字(即创建新的描述符,而不是释放一个)

有人知道怎么做吗


编辑:没有这样的功能,打开了Boost.Asio的票证

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

试试Boost邮件列表。那里的人可能会告诉你这种方法是好是坏,以及为什么。如果你在那里发现什么有趣的东西,请在这里发布摘要


顺便说一句:Boost 1.42是昨天发布的。

我在过去通过使用dup系统调用创建另一个文件描述符来实现这一点

int fd=dup(旧的_fd)

socket.assign(…fd)


显然,它与释放描述符的语义不同,但当您需要将Boost.Asio放在承担描述符所有权的现有层之上或之下时,它工作得很好。

完成后,您是否尝试将-1分配给套接字?我从来没有试过,但它可能有用。值得一试。我不认为这会起作用,因为在分配新的套接字时,套接字应该关闭现有的底层套接字。