2010-01-11 102 views
6

是否可以从Boost.ASIO的套接字类中分离出本地套接字?如果是这样,该怎么办?我似乎无法在文档中找到任何明显的东西。从Boost.ASIO的套接字类中分离出本地套接字

作为我想要完成的工作的一个快速概览:我有一个使用Boost.ASIO建立连接并进行一些协商的类,然后在成功时返回本机Windows SOCKET,或在失败时返回0。

除非我错了,否则当我的boost :: asio :: basic_socket被销毁时,原生套接字将被关闭并解除分配。

回答

0

对于Mac OS X执行以下操作(适用于Linux也不是很难修改,只是注意到这个想法):

  1. 裹插座在shared_ptr,使其赢得了在进入不同的程序时保持关闭并保持活着(至少一个参考应该始终存在);
  2. 获取与socket.native();
  3. 本地描述符从kqueue中删除它:

    struct kevent event; 
    EV_SET(&event, descriptor, EVFILT_READ, EV_DELETE, 0, 0, 0); //or EVFILT_WRITE 
    
  4. ,并使其阻塞如果需要的话:

    fcntl(descriptor, F_SETFL, fcntl(descriptor, F_GETFL, 0) & ~O_NONBLOCK); 
    
+0

我知道它不完全明显,但码以下列表元素需要8个空格缩进 - 请参阅[这里](http://meta.stackexchange.com/questions/24424/list-preceeding-code-prevents-code-f ROM感显示的-AS-代码)。 – 2010-07-14 18:15:15