2010-01-31 3 views
6

C'è una funzione di assegnare in zoccoli Boost.Asio, però sto cercando qualcosa di simileRilasciare una presa in Boost.Asio (opposto di assegnazione), o non trasferire la proprietà

  • rilascio/annullare l'assegnazione che trasferirebbe la proprietà sul socket di nuovo all'utente.

o

  • qualche tipo di assegnazione che non trasferire la proprietà alla presa classe, quindi non sarebbe chiuderla quando distrutto.

Sono a conoscenza di this solution ma implica la duplicazione del socket (ovvero creazione di un nuovo descrittore piuttosto che il rilascio di uno).

Qualcuno sa come può essere fatto?

Edit: Non esiste funzione, aperta biglietto per Boost.Asio https://svn.boost.org/trac/boost/ticket/3900

+0

Hai provato ad assegnare -1 al socket quando hai finito? Non l'ho mai provato, ma potrebbe funzionare. Vale la pena sparare. – Dan

+0

Non so che questo potrebbe funzionare, perché si prevede che il socket richiuda il socket sottostante esistente quando si assegna quello nuovo. – Artyom

risposta

1

non riuscivo a trovare alcun modo nei file .hpp (Boost 1.35), quindi penso che avrai per patch ASIO te stesso e aggiungere un metodo release(). Al termine, puoi conservare la patch per te stesso, pubblicarla sul tuo sito web (o qui) o inviarla nuovamente a Boost.

Provate le mailing list di Boost. Le persone lì potrebbero dirti se un tale metodo è un'idea buona o cattiva e perché. Se trovi qualcosa di interessante lì, per favore pubblica un riassunto qui.

BTW: Boost 1.42 è stato rilasciato ieri.

1

Ho realizzato questo in passato utilizzando la chiamata di sistema dup per creare un altro descrittore di file.

int fd = DUP (old_fd)

socket.assign (... fd)

E ovviamente non ha la stessa semantica rilasciando il descrittore, ma funziona bene quando devi sovrapporre Boost.Asio sopra o sotto un livello esistente che presuppone la proprietà del descrittore.