/// <summary>
        /// Closes a response stream, if present.
        /// </summary>
        /// <param name="disposing">Not used.</param>
        protected override void Dispose(bool disposing)
        {
            if (m_responseStream != null)
            {
                bool closeConnection = true;
                if (m_httpWebRequest.KeepAlive)
                {
                    string connValue = null;

                    // Check if server have sent use "Connection:Close"
                    if (m_httpResponseHeaders != null)
                    {
                        connValue = m_httpResponseHeaders[HttpKnownHeaderNames.Connection];
                    }

                    // If server had not send this header or value is not "close", then we keep connection.
                    closeConnection = connValue == null || connValue.ToLower() == HttpKnownHeaderValues.close;

                    // Add new socket and port used to connect to the list of sockets.
                    // Save connected socket and Destination IP End Point, so it can be used next time.
                    // But first we need to validate that this socket is already not in the list. We do not want same socket to be twice in the list.
                    lock (HttpWebRequest.m_ConnectedStreams)
                    {
                        // If it is not in the list - Add it
                        if (closeConnection)
                        {
                            if (HttpWebRequest.m_ConnectedStreams.Contains(m_responseStream))
                            {
                                // Either KeepAlive was not set or server requested closing connection.
                                HttpWebRequest.m_ConnectedStreams.Remove(m_responseStream);
                            }

                            // Closing connection socket.
                            m_responseStream.Dispose();
                        }
                        else
                        {
                            m_responseStream.ReleaseStream();
                        }
                    }
                }

                // Set flag that we already completed work on this stream.
                m_responseStream = null;
            }
        }