ts-7000
[Top] [All Lists]

[ts-7000] Re: Rebind after process crash -- quasi-n00b sockets issue

To:
Subject: [ts-7000] Re: Rebind after process crash -- quasi-n00b sockets issue
From: "dokapra" <>
Date: Mon, 12 May 2008 19:20:08 -0000
--- 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/

<Prev in Thread] Current Thread [Next in Thread>
Admin

Disclaimer: Neither Andrew Taylor nor the University of NSW School of Computer and Engineering take any responsibility for the contents of this archive. It is purely a compilation of material sent by many people to the birding-aus mailing list. It has not been checked for accuracy nor its content verified in any way. If you wish to get material removed from the archive or have other queries about the archive e-mail Andrew Taylor at this address: andrewt@cse.unsw.EDU.AU