2010-01-31 6 views
6

Hay una función de asignar en los zócalos Boost.Asio, sin embargo estoy buscando algo comoSoltar una toma en Boost.Asio (opuesto de asignar), o no transferir la propiedad

  • liberación/desasignar eso transferiría la propiedad del socket al usuario.

o

  • algún tipo de asignar que no transferir la propiedad a la toma de clase, por lo que no sería cerrarla cuando se destruye.

Conozco this solution pero implica duplicar el socket (es decir, crear un nuevo descriptor en lugar de soltar uno).

¿Alguien sabe cómo se puede hacer esto?

Editar: No hay tal función, abrió billete para Boost.Asio https://svn.boost.org/trac/boost/ticket/3900

+0

¿Intentó asignar -1 al socket cuando terminó? Nunca lo he intentado, pero podría funcionar. Vale la pena un tiro. – Dan

+0

No adelgazo, esto funcionaría, porque se espera que el socket cierre el zócalo subyacente existente al asignar el nuevo. – Artyom

Respuesta

1

no pude encontrar cualquier forma en los archivos .hpp (Boost 1.35), por lo que creo que tendrá parchear ASIO usted mismo y agregue un método release(). Cuando haya terminado, puede quedarse con el parche, publicarlo en su sitio web (o aquí) o enviarlo nuevamente a Boost.

Pruebe las listas de correo de Boost. La gente de allí podría decirle si ese método es una buena o mala idea, y por qué. Si encuentras algo interesante allí, publica un resumen aquí.

BTW: Boost 1.42 fue lanzado ayer.

1

He logrado esto en el pasado mediante el uso de la llamada del sistema dup para crear otro descriptor de archivo.

int fd = dup (old_fd)

socket.assign (... fd)

Es obvio que no tiene la misma semántica que liberar el descriptor, pero funciona bien cuando es necesario colocar capas de Boost.Asio encima o debajo de una capa existente que asume la propiedad del descriptor.

Cuestiones relacionadas