C#socket 服务端在客户端断开连接后,服务端卡死在socket.receive()

项目主要是不停的接收多个客户端发送过来的数据,服务端发送指令给客户端,客户端返回数据给服务端。在测试运行时,其中一个客户端断电(断开连接),导致服务端卡死在接收的死循环里,导致正常连接的客户端的数据无法接收。,如何关闭已断开的socket?

  void Recive(object o)
        {
            Socket socketSend = o as Socket;
             while (true)
            {
                try
                {
                    //客户端连接成功后,服务器应该接受客户端发来的消息
                    byte[] buffer = new byte[1024 * 1024 * 2];
                    //实际接受到的有效字节数

                    int r = socketSend.Receive(buffer);

                    if (r == 0)
                    {
                        break;
                    }
                    string str = Encoding.UTF8.GetString(buffer, 0, r);
                }
                catch
                {
                    // MessageBox.Show("接收出错");
                }

            }

 

独立线程