public void Listen(int backlog, Action<UvStreamHandle, int, Exception, object> callback, object state)
{
if (_listenVitality.IsAllocated)
{
throw new InvalidOperationException("TODO: Listen may not be called more than once");
}
try
{
_listenCallback = callback;
_listenState = state;
_listenVitality = GCHandle.Alloc(this, GCHandleType.Normal);
_uv.listen(this, backlog, _uv_connection_cb);
}
catch
{
_listenCallback = null;
_listenState = null;
if (_listenVitality.IsAllocated)
{
_listenVitality.Free();
}
throw;
}
}