Basic WEBrick question


#1

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


#2

On Friday 20 January 2006 10:59, Mark V. 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.

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


#3

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.


#4

On 1/20/06, Caleb T. removed_email_address@domain.invalid wrote:

On Friday 20 January 2006 10:59, Mark V. 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.

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?