/// <summary> /// Retrieve a message from the tunnel. /// </summary> protected AnpMsg GetAnpMsg() { AnpTransport transfer = InternalAnpTunnel.GetTransport(); Debug.Assert(transfer.isReceiving || transfer.doneReceiving); Debug.Assert(!transfer.isSending); while (!transfer.doneReceiving) { transfer.doXfer(); if (!transfer.doneReceiving) { SelectSockets set = new SelectSockets(); InternalAnpTunnel.UpdateSelect(set); Block(set); } } AnpMsg msg = transfer.getRecv(); transfer.beginRecv(); return(msg); }