private bool CanClose()
 {
     while (MainForm.Instance.LocalAddress == null) ;
     if (MainForm.Instance.LocalAddress.ToString() == txtServer.Text) txtServer.Text = "127.0.0.1";
     Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     try
     {
         ConnectionHandler.ConnectTo(s, txtServer.Text, int.Parse(tempPortTxt.Text));
     }
     catch
     {
         MessageBox.Show("Unable to connect to the server.");
         return false;
     }
     ModUpdaterNetworkStream str = new ModUpdaterNetworkStream(s);
     Packet.Send(new HandshakePacket { Type = HandshakePacket.SessionType.ServerList }, str);
     Packet p = Packet.ReadPacket(str); //The server should only return a ServerList, right?
     ServerListPacket sp = null;
     if (!(p is ServerListPacket)) //But just in case...
     {
         Packet.Send(new DisconnectPacket(), str);
         ConnectTo = new Server { Address = txtServer.Text, Port = int.Parse(tempPortTxt.Text), Name = "Not Yet Defined." };
         str.Close();
         s.Disconnect(false);
         return true;
     }
     sp = (ServerListPacket)p;
     List<Server> servers = new List<Server>();
     for (int i = 0; i < sp.Servers.Length; i++)
     {
         Server srv = new Server { Address = sp.Locations[i], Name = sp.Servers[i], Port = sp.Ports[i] };
         servers.Add(srv);
     }
     SelectServerDialog dial = new SelectServerDialog(servers.ToArray());
     dial.ShowDialog();
     if (dial.DialogResult != System.Windows.Forms.DialogResult.OK)
         return false;
     ConnectTo = dial.SelectedServer;
     return true;
 }