From: Antonin Amand Date: 2008-10-14T16:26:20+09:00 Subject: Re: Problem with bind for Socket class On Oct 14, 8:34 am, Vladimir Fekete wrote: > On Tue, Oct 14, 2008 at 03:30:05PM +0900, Robert Klemme wrote: > > On 14.10.2008 07:47, Vladimir Fekete wrote: > > > >when I tested it it worked. But when I tried to run it again I've got error > > >message: > > > >/t1.rb:10:in `bind': Address already in use - bind(2) (Errno::EADDRINUSE) > > >        from ./t1.rb:10 > > > >I tried to find "related" bug/problem in google but withouth success. > > >Could anybody > > >help me how to "unbind" socket ? Or explain me where I making mistake. I > > >have > > >some experiences only with WinSock API and I don't remember any unbind > > >function. > > > >P.S. I'm running it on Debian Linux, Ruby version 1.8. > > > I remember that on some OS (or particular versions) socket cleanout is > > delayed.  Did you try to check with "netstat -a -n | fgrep 2201" or > > similar to see what state the port is in? > > Yes you are right, after circa 5 minutes it works again. So you say it is > problem (issue) of OS and not ruby, yes ? If you want to reuse the port you must set this flag on the socket before you bind it. When you use this kind of option you must ensure that you can't run multiple instances of the program. Use a lock file or something. socket.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true) Cheers.