Sorry to trouble you all but I'm really stumped on this one. Could 
someone please advise on what might be behind this problem on FreeBSD?

The fundamental problem is that the new release of Interactive 
Learning Environment (based on Ocelot) won't start (fails in 
TCPServer.new) but the prior release runs fine. So I wrote this 
stripped down test case, which fails in the same way on FreeBSD but 
runs fine on my linux dev box.

require 'socket'
ports=[80, 8080, 8000, 8085, 8090, 9000]
host="127.0.0.1"
ports.each { |port|
	begin
		s = TCPServer.new(host, port)
		puts "success:#{port}"
	rescue Exception => e
		puts "failed:#{port}: #{e}"
	end
}

On FreeBSD 4.1.1-STABLE (SERVER)  I get this.

ruby test.rb
failed:80: Invalid argument - "bind(2)"
failed:8080: Invalid argument - "bind(2)"
failed:8000: Invalid argument - "bind(2)"
failed:8085: Invalid argument - "bind(2)"
failed:8090: Invalid argument - "bind(2)"
failed:9000: Invalid argument - "bind(2)"

On Linux I get this:

failed:80: Permission denied - "bind(2)"
failed:8080: Address already in use - "bind(2)"
failed:8000: Address already in use - "bind(2)"
success:8085
success:8090
success:9000

The first three ports are known busy on both machines but the other 
three should be free on both machines.

-- 
Brad Cox, PhD; bcox / virtualschool.edu 703 361 4751
o For industrial age goods there were checks and credit cards.
    For everything else there is http://virtualschool.edu/mybank
o Java Interactive Learning Environment http://virtualschool.edu/jile
o Java Web Application Architecture: http://virtualschool.edu/jwaa