diff --git a/sc2/src/sc2code/libs/network/netmanager/ndesc.c b/sc2/src/sc2code/libs/network/netmanager/ndesc.c index a34712205..c44369153 100644 --- a/sc2/src/sc2code/libs/network/netmanager/ndesc.c +++ b/sc2/src/sc2code/libs/network/netmanager/ndesc.c @@ -138,6 +138,15 @@ NetDescriptor_decRef(NetDescriptor *nd) { return false; } +// The socket will no longer be managed by the NetManager. +void +NetDescriptor_detach(NetDescriptor *nd) { + NetManager_removeDesc(nd); + nd->socket = Socket_noSocket; + nd->flags.closed = true; + NetDescriptor_decRef(nd); +} + Socket * NetDescriptor_getSocket(NetDescriptor *nd) { return nd->socket; diff --git a/sc2/src/sc2code/libs/network/netmanager/ndesc.h b/sc2/src/sc2code/libs/network/netmanager/ndesc.h index e1f80ee81..630532629 100644 --- a/sc2/src/sc2code/libs/network/netmanager/ndesc.h +++ b/sc2/src/sc2code/libs/network/netmanager/ndesc.h @@ -63,6 +63,7 @@ NetDescriptor *NetDescriptor_new(Socket *socket, void *extra); void NetDescriptor_close(NetDescriptor *nd); void NetDescriptor_incRef(NetDescriptor *nd); bool NetDescriptor_decRef(NetDescriptor *nd); +void NetDescriptor_detach(NetDescriptor *nd); Socket *NetDescriptor_getSocket(NetDescriptor *nd); void NetDescriptor_setExtra(NetDescriptor *nd, void *extra); void *NetDescriptor_getExtra(const NetDescriptor *nd);