public void DoHandshake(Action callback) { if (Interlocked.CompareExchange(ref _connectionState, 1, 0) == 0) { ThreadPool.QueueUserWorkItem(_ => { while (_packets.TryTake(out var _)) { } OpenSsl.SSL_set_connect_state(Ssl); if (OpenSsl.SSL_do_handshake(Ssl) != 1) { Console.WriteLine($"Cannot establish DTLS: {OpenSsl.GetLastError()}"); Interlocked.Exchange(ref _connectionState, 0); return; } callback(); }); } }