Example #1
0
        public IEnumerator Recv(CothreadSocketRecvData recvData)
        {
            if (!Connected)
            {
                yield break;
            }
            recvData.Clear();
            var hub = CothreadHub.Instance;
            var rs  = sock.BeginReceive(recvData.Data, 0, recvData.Data.Length,
                                        SocketFlags.None, hub.cb, hub.current);

            if (!rs.IsCompleted)
            {
                yield return(rs);
            }
            if (hub.CurrentCothread.IsTimeout(false))
            {
                Close();
            }
            else
            {
                try {
                    recvData.Length = sock.EndReceive(rs);
                } catch (SocketException) {
                    Close();
                }
            }
        }