Forum > Networking and Web Programming

problem when stopping a TTCPServer with connected customers

(1/1)

chubb:
Hello

I try to use a TCP server, Windows and Linux. My choice is focused on the TTCPServer.

I managed to use it normally, mode bmThreadBlocking.

When a client connects to my server I keep it in OnAccept function is called when I received the event of the same name. When the client disconnects, I lot of my office OnAccept. Up until this no problem.

When I turn off the server and restarts without any client connected to him, everything goes well. By cons, if I switch off the server when a client is connected, the client is connected and when I try to restart the server it does not work.

So I tried to force the disconnection of customers before closing the server (at the connection I store client in a collection), the customer logs out fine but when I restart the server, I get an error on bind ( or ENXIO No such device or address).

I should mention that this error occurs only on Linux, the same code works on Windows without problem.

Thank you in advance

Chubb

Marc:
without simple sample code it is hard to tell whats going wrong.

theo:
Just a wild guess: Synapse has a property EnableReuse(Value: Boolean);
http://synapse.ararat.cz/doc/help/blcksock.TBlockSocket.html#EnableReuse

From http://linux.die.net/man/7/socket

--- Quote ---Linux will only allow port re-use with the SO_REUSEADDR option when this option was set both in the previous program that performed a bind() to the port and in the program that wants to re-use the port. This differs from some implementations (e.g., FreeBSD) where only the later program needs to set the SO_REUSEADDR option. Typically this difference is invisible, since, for example, a server program is designed to always set this option.
--- End quote ---

chubb:
Welcome

Thank you theo, after some research using the links provided, I discovered that there is a parameter 'SO_REUSEADDR' to specify that we can reuse the socket immediately

Below is a part from the forum (http://linuxfr.org/forums/27/18820.html)


--- Quote ---The TCP RFC describing states that after closing a socket, it must remain "useless" for a certain time (typically the maximum round-trip time set for a TCP connection), only to avoid reopening the same ports, it recovers bits of the previous connection packets that were in transit through the maze of the Internet.

After completing a socket, looks with "netstat-ap - ip" the list of existing sockets in the system: those that are closed are in such a state of "TIME_WAIT".
--- End quote ---

Thank you everybody

Good day

Navigation

[0] Message Index

Go to full version