Hi all,

I have a server and a client.  The Server application is started and does
the following:

    SrvSocket.Proto   := 'tcp';
    SrvSocket.Addr    := '0.0.0.0';   // Use any interface
    SrvSocket.Port    := '4000';        // Wait on this port.
    SrvSocket.Listen;                 // Start listening for client

I then start up the client which does this:

    CliSocket.Proto    := 'tcp';
    CliSocket.Addr     := HostnameEdit.Text;
    CliSocket.Port     := '4000';
    CliSocket.LocalPort  := '4001';
    CliSocket.Connect;

So far so good.  When the connection is established the server shows this:

    { We need to accept the client connection }
    NewHSocket := SrvSocket.Accept;

    { And then associate this connection with our client socket }
    CliSocket.Dup(NewHSocket);

    { Wants to know who is connected to display on screen }
    CliSocket.GetPeerName(PeerName, Sizeof(PeerName));

    { User likes to see internet address in dot notation }
    Peer := IntToStr(ord(PeerName.sin_addr.S_un_b.s_b1)) + '.' +
            IntToStr(ord(PeerName.sin_addr.S_un_b.s_b2)) + '.' +
            IntToStr(ord(PeerName.sin_addr.S_un_b.s_b3)) + '.' +
            IntToStr(ord(PeerName.sin_addr.S_un_b.s_b4));
    InfoLabel.Caption := 'Remote ' + Peer + ' connected. Port:' +
    CliSocket.GetPeerPort;

And then the Server can send information to the client.

    m.Attrib := REVERSE_TEXT;
    m.Cmd := ATTRTEXT_CMD;
    CliSocket.Send(@m,sizeof(m)); 

The problem come with disconnecting and reconnecting.  
If I disconnect the server first by:

    { Server Application: Shutdown Server }
    CliSocket.ShutDown(SD_BOTH);              { Shut the communication down
}
    CliSocket.Close;                          { Close the communication
}
    SrvSocket.ShutDown(SD_BOTH);              { Shut the communication down
}
    SrvSocket.Close;                          { Close the communication
}

And then shut down the client:

    { Client Application: Shut down client }
    CliSocket.ShutDown(SD_BOTH);              { Shut the communication down
}
    CliSocket.Close;

I can easily reconnect without problems.  

However if I run the Client shutdown code first (or terminate the client
application and restart) and shutdown the server code last,  I get the Error
10048 which is 'Port in use'.  That implies (since the client application is
terminated and restarted), that the server application seems to be hanging
onto the port.

How do I code it so either side can 'crash', be rebooted or just disconnect
and reconnect?

Thanks,

John Dammeyer

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to