--- In "Fred" <> wrote:
>
> Greetings, mailing list!
>
> Running TS-Linux on the Ts-7250, I get a problem that I've not
> encountered on any other socket-based platform, a problem with the
> bind() call after my process crashes and then gets re-launched.
>
> When my process launches, I call bind() to a port number and
> everything runs perfectly. If for any reason my process crashes, a
> process monitoring process that I also have running notices that my
> process has crashed and it will re-launch my dead process.
>
> The bind() call, however, fails the second time my process is
> launched, probably because the port number is still marked as in use
> in the TCP/IP stack, and won't get released until the stack performs
> clean-up the next time it's scheduled.
>
> I've not had this problem under Trumpet Winsock under Windows 3.11
> (which, bless me, I'm still using at home because I run Ham Radio
> TNCs and old stuff, some of it under CP/M.)
>
> Isn't sockopt with option REUSE supposed to allow me to rebind the
> same port number?
>
> Any way, I greatly appreciate any help anyone can offer. Maybe
> there's a socket call I'm unaware of that will force an existing
> binding on a dead process' port number to be relinquished, maybe.
>
> Thanks!
>
This works for me:
// Create socket for listening for client connection requests.
listenSocket = socket(AF_INET, SOCK_STREAM, 0);
if (listenSocket < 0) {
syslog(LOG_ERR,"cannot create listen socket");
exit(EXIT_FAILURE);
}
....
/* Enable address reuse. If previously interrupted in the middle of
communication, tcp stack is in TIME_WAIT state.
* This skips waiting for this timeout */
on = 1;
res = setsockopt(listenSocket, SOL_SOCKET, SO_REUSEADDR, &on,
sizeof(on));
if (bind(listenSocket, (struct sockaddr *) &serverAddress,
sizeof(serverAddress)) < 0) {
syslog(LOG_ERR,"cannot bind socket");
exit(EXIT_FAILURE);
}
....
------------------------------------
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/ts-7000/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/ts-7000/join
(Yahoo! ID required)
<*> To change settings via email:
<*> To unsubscribe from this group, send an email to:
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|