I'm having a few problems with this code
1. first, when I click start server and stop it, it gives no exception even though the ports in use (I have it in use to make it throw an error when binding )

2. When I click Start server the 2nd time, I get the following error:
Code:
An unhandled exception of type 'System.StackOverflowException' occurred in System.Windows.Forms.dll

Here is my code:
Code:
    public partial class Form1 : Form
    {
        private int server_port;
        public Thread serverThread;
        bool isRunning;
    


        /*
         * add_log()
         * handle logging
        */
        delegate void add_log_d(string text);
        private  void add_log(string text)
        {
            if (this.txtLog.InvokeRequired)
            {
                this.txtLog.Invoke(new add_log_d(this.add_log), new object[] { text });
            }
            else
            {
                this.add_log(text);
            }
        }


        /*
         * StartRecvFrom()
         * - Start listening for data and handle it.
        */
        public void StartRecvFrom()
        {
            IPHostEntry localhost;
            try
            {
                // bind to localhost
                Socket sckUdp = new Socket( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp );
                try
                {
                    localhost = Dns.GetHostByName( Dns.GetHostName() );
                }
                catch( Exception e )
                {
                    add_log(">> Error - " + e.ToString() + "\n");
                    return;
                }
                IPEndPoint localIP = new IPEndPoint(localhost.AddressList[0], server_port );
                sckUdp.Bind( localIP );


                // begin listening for data
                while( true )
                {
                    byte[] received = new byte[32768];
                    IPEndPoint tmpIP = new IPEndPoint( localhost.AddressList[0], server_port );
                    EndPoint remoteIP  = (tmpIP);
                    int bytes_received = sckUdp.ReceiveFrom( received, ref remoteIP );
                    string data = System.Text.Encoding.ASCII.GetString( received );

                    add_log(">> Received packet from " + remoteIP.ToString() + ":\n" + data + "\n\n");
                }
            }
            catch( SocketException se )
            {
                add_log(">> Socket Exception occurred - " + se.ToString() + "\n");
            }
        }


        /*
         * StartUDPServer
         * - Start the server thread.
        */
        public void StartUDPServer()
        {
            try
            {
                serverThread = new Thread(new ThreadStart(StartRecvFrom));
                serverThread.IsBackground = true;
                serverThread.Start();
                isRunning = true;
            }
            catch (Exception e)
            {
                add_log(">> Error starting server - " + e.ToString() + "\n");
                serverThread.Abort();
                isRunning = false;
            }
        }

        /*
         * StopUDPServer()
         * - Stop the UDP server thread.
        */
        public void StopUDPServer()
        {
            try
            {
                serverThread.Abort();
                isRunning = false;
            }
            catch (Exception e)
            {
                add_log(">> Error stopping server - " + e.ToString() + "\n");
            }
        }



        private void btnStartStop_Click(object sender, EventArgs e)
        {
            if (btnStartStop.Text == "Start Server")
            {
                btnStartStop.Text = "Stop Server";
                StartUDPServer();
            }
            else if ( btnStartStop.Text == "Stop Server" )
            {
                btnStartStop.Text = "Start Server";
                StopUDPServer();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            btnStartStop.Text = "Start Server";
            isRunning = false;
            server_port = 21000;
        }

        public Form1()
        {
            InitializeComponent();
        }
    }


What am I doing wrong? It's probably something stupid.