[MUD-Dev] Re: Quick socket question

Chris Gray cg at ami-cg.GraySage.Edmonton.AB.CA
Sat Nov 7 19:50:16 New Zealand Daylight Time 1998


[Dr. Cat:]

 >I thought at first it was because I wasn't closing the socket when the 
 >accept() problem I was having crashed it.  But I did a proper operator 
 >shutdown, which takes the bound socket and does shutdown(mastsock, 2)
 >and close(mastsock) before existing.  Do I need to do anything more on 
 >closing to make sure the port is freed up, even if there's some 
 >recalcitrant user's machine out there still desperately trying to talk to 
 >it?  Or is there a setsockopt option I need to set differently?  Or is 
 >there a sysadmin tweak to change that timeout value?  If anyone's dealt 
 >with this issue under Linux before (or any other Unix that has the same 
 >issue) I'd appreciate a pointer.  :X)

I still get a few delays of a minute or two, and sometimes I don't, but
that is about the maximum. I'm running RedHat 5.1. Perhaps that's
because I always manage to get the shutdown and close in properly.
This is it, literally:

static void
killSocket(int s)
{

    TRACE("killSocket", s);
    shutdown(s, 2);
#if defined(_WIN32)
    closesocket(s);
#elif defined(AMIGA)
    CloseSocket(s);
#else
    close(s);
#endif
}

One thing you could try (I thought I had it in!) is to use setsockopt
with SO_REUSEADDR.

--
Don't design inefficiency in - it'll happen in the implementation. - me

Chris Gray     cg at ami-cg.GraySage.Edmonton.AB.CA




More information about the MUD-Dev mailing list