Usted no puede 'detach' una toma Boost.ASIO. Puede utilizar la función de miembro native_handle()
para obtener un identificador SOCKET
desde el objeto asio::socket
, pero debe asegurarse de que el objeto asio::socket
no se destruya hasta que haya terminado con SOCKET
. Continúa manteniendo la propiedad del SOCKET
nativo y lo cerrará cuando se llame a su destructor.
como André sugirió, se podría duplicar el mango del zócalo. Sin embargo, no consideraría duplicar este socket seguro, porque Boost.ASIO asocia automáticamente el identificador nativo SOCKET
con un puerto de E/S de finalización. Si el contenedor .NET Socket u otro código intenta asociar el socket duplicado con un puerto de E/S diferente, se producirá un error. Sé que la clase .NET 2.0 Socket asocia, de hecho, el identificador SOCKET
con un puerto de E/S de finalización para operaciones asíncronas. Sin embargo, esto puede haber cambiado en versiones más recientes.
No es una opción, el constructor que toma un (envuelto) identificador de socket es privada. –
@HansPassant: Sí, pero [éste] (http://msdn.microsoft.com/en-us/library/ms145125.aspx) es público. Advertencia: baterías no incluidas. –