2010-01-11 92 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