Non è possibile una presa Boost.ASIO 'distacco'. È possibile utilizzare la funzione membro native_handle()
per ottenere un handle SOCKET
dall'oggetto asio::socket
, ma è necessario assicurarsi che l'oggetto asio::socket
non venga distrutto fino a quando non si è finito con lo SOCKET
. Continua a detenere la proprietà del nativo SOCKET
e lo chiuderà quando viene chiamato il distruttore.
Come suggerito da André, è possibile duplicare la maniglia del socket. Tuttavia, non prenderei in considerazione la duplicazione di questo socket sicuro, perché Boost.ASIO associa automaticamente l'handle originale SOCKET
con una porta di completamento I/O. Se il wrapper .NET Socket o qualche altro codice tenta di associare il socket duplicato a una porta di completamento I/O diversa, si verificherà un errore. So che la classe .NET 2.0 Socket, infatti, associa l'handle SOCKET
con una porta di completamento I/O per operazioni asincrone. Questo potrebbe essere cambiato nelle versioni più recenti, tuttavia.
fonte
2011-09-21 17:10:04
Non un'opzione, il costruttore che accetta un handle di socket (spostato) è privato. –
@HansPassant: Sì, ma [questo] (http://msdn.microsoft.com/en-us/library/ms145125.aspx) è pubblico. Attenzione: batterie non incluse. –