RatioMaster_source.RM.MakeWebRequestEx C# (CSharp) Method

MakeWebRequestEx() private method

private MakeWebRequestEx ( Uri reqUri ) : RatioMaster_source.TrackerResponse
reqUri System.Uri
return RatioMaster_source.TrackerResponse
        private TrackerResponse MakeWebRequestEx(Uri reqUri)
        {
            Encoding _usedEnc = Encoding.GetEncoding(0x4e4);
            SocketEx sock = null;
            TrackerResponse trackerResponse;
            try
            {
                string host = reqUri.Host;
                int port = reqUri.Port;
                string path = reqUri.PathAndQuery;
                AddLogLine("Connecting to tracker (" + host + ") in port " + port);
                sock = createSocket();
                sock.PreAuthenticate = false;
                int num2 = 0;
                bool flag1 = false;
                while ((num2 < 5) && !flag1)
                {
                    try
                    {
                        sock.Connect(host, port);
                        flag1 = true;
                        AddLogLine("Connected Successfully");
                        continue;
                    }
                    catch (Exception exception1)
                    {
                        AddLogLine("Exception: " + exception1.Message + "; Type: " + exception1.GetType());
                        AddLogLine("Failed connection attempt: " + num2);
                        num2++;
                        continue;
                    }
                }

                string cmd = "GET " + path + " " + currentClient.HttpProtocol + "\r\n" + currentClient.Headers.Replace("{host}", host) + "\r\n";
                AddLogLine("======== Sending Command to Tracker ========");
                AddLogLine(cmd);
                sock.Send(_usedEnc.GetBytes(cmd));

                // simple reading loop
                // read while have the data
                try
                {
                    byte[] data = new byte[32 * 1024];
                    MemoryStream memStream = new MemoryStream();
                    while (true)
                    {
                        int dataLen = sock.Receive(data);
                        if (0 == dataLen)
                            break;
                        memStream.Write(data, 0, dataLen);
                    }

                    if (memStream.Length == 0)
                    {
                        AddLogLine("Error : Tracker Response is empty");
                        return null;
                    }

                    trackerResponse = new TrackerResponse(memStream);
                    if (trackerResponse.doRedirect)
                    {
                        return MakeWebRequestEx(new Uri(trackerResponse.RedirectionURL));
                    }

                    AddLogLine("======== Tracker Response ========");
                    AddLogLine(trackerResponse.Headers);
                    if (trackerResponse.Dict == null)
                    {
                        AddLogLine("*** Failed to decode tracker response :");
                        AddLogLine(trackerResponse.Body);
                    }

                    memStream.Dispose();
                    return trackerResponse;
                }
                catch (Exception ex)
                {
                    sock.Close();
                    AddLogLine(Environment.NewLine + ex.Message);
                    return null;
                }
            }
            catch (Exception ex)
            {
                if (null != sock) sock.Close();
                AddLogLine("Exception:" + ex.Message);
                return null;
            }

            // if (null != sock) sock.Close();
            // else return null;
        }