Basic WEBrick question

I have the following basic code. When I run this it says "TCPServer
Error: Address already in use - bind(2)". I can hit Ctrl-C to kill it,
change the port to anything and rerun it and I still get that error
message. I must be missing something really basic.

require 'webrick'
include WEBrick

class AddServlet < HTTPServlet::AbstractServlet
  def do_GET(req, res)
    n1 = req.query['n1'].to_i
    n2 = req.query['n2'].to_i

    res['Content-Type'] = 'text/html'
    res.body = "The sum of #{n1} and #{n2} is #{n1 + n2}."
  end
end

server = HTTPServer.new(:Port=>2000)
trap('INT') { server.shutdown }
trap('TERM') { server.shutdown }
server.mount("/add", AddServlet)
server.start

···

--
R. Mark Volkmann
Partner, Object Computing, Inc.

It works here on Linux. What's your platform, and are you sure you don't have
something else already running on port 2000 ?

···

On Friday 20 January 2006 10:59, Mark Volkmann wrote:

I have the following basic code. When I run this it says "TCPServer
Error: Address already in use - bind(2)". I can hit Ctrl-C to kill it,
change the port to anything and rerun it and I still get that error
message. I must be missing something really basic.

> I have the following basic code. When I run this it says "TCPServer
> Error: Address already in use - bind(2)". I can hit Ctrl-C to kill it,
> change the port to anything and rerun it and I still get that error
> message. I must be missing something really basic.

It works here on Linux.

Thanks for checking it!

What's your platform

I've been able to duplicate this under both Windows XP and Fedora Core 4 Linux.

and are you sure you don't have
something else already running on port 2000 ?

I tried again a while ago and it's now working under Windows. Makes me
think that for some reasons when I killed the server it didn't
immediately free up the port. However, under Linux it's still saying
the port is in use.

Is there an easy way I can ask Linux for a list of all the ports in use?

···

On 1/20/06, Caleb Tennis <caleb@aei-tech.com> wrote:

On Friday 20 January 2006 10:59, Mark Volkmann wrote:

--
R. Mark Volkmann
Partner, Object Computing, Inc.

I tried again a while ago and it's now working under Windows. Makes me
think that for some reasons when I killed the server it didn't
immediately free up the port. However, under Linux it's still saying
the port is in use.

There's usually a setting you can use to tell the OS to allow you to reuse the
port once it's closed. I don't have my Pickaxe in front of me, but I do have
my camel book and in Perl there's a "Reuse" parameter that gets passed to new
TCP Sockets to be able to reuse the port. I'm guessing Webrick has something
similiar.

Is there an easy way I can ask Linux for a list of all the ports in use?

"netstat -at" for TCP ports.