i think sockets are not immediately closed by the OS, so you can't bind to the same port right after closing it.
see http://lists.gnu.org/archive/html/users-prolog/2004-07/msg00007.html one thing which could help is to add a foreign function interface to setsockopt(2) which would set the SO_REUSEPORT on the socket, before doing the bind. -salvador On Jul 20, 2013, at 23h08, Sean Charles <[email protected]> wrote: > Using this code to start and stop a session: > > session_start(Port) :- > socket('AF_INET', S), > socket_bind(S, 'AF_INET'(localhost, Port)), > socket_listen(S, 0), > socket_accept(S, Client, In, Out), > format(Out, "~n~n>> Welcome to SKYNET, ~w~n", [Client]), > cmd_loop(In, Out), > close(In),close(Out),socket_close(S), > format("Clean close~n", []). > > I've done lots of socket coding with PHP and C/C++ and usually the safest bet > is to get the client to terminate the connection first to avoid and issues > within the TCP driver regarding wait states and things but being new to > prolog still I wonder if I've done something silly in my code that I can't > see? > > I am using telnet to connect, all foes well until I type "bye". The program > terminates, tells me it was a clean close but when I try to run again: > > session_start(10000). > uncaught exception: error(system_error('Address already in > use'),socket_bind/2) > > Bummer. > > Any suggestions? > > _______________________________________________ > Users-prolog mailing list > [email protected] > https://lists.gnu.org/mailman/listinfo/users-prolog _______________________________________________ Users-prolog mailing list [email protected] https://lists.gnu.org/mailman/listinfo/users-prolog
