[Mono-list] cannot bind HttpListener to IP address (+ different behavior in mono / .net)

Kriss (Free) kriss.free at free.fr
Tue Oct 1 07:17:55 UTC 2013


That works on mono if you serve a single dns name, but as soon as you have
two or more, it’s not a solution: you’ll then get a
‘System.Net.Sockets.SocketException: Address already in use’. Actually, if
you use dns name as a prefix, you cannot even use both “www.example.com” and
“example.com” together


Ex:

httplistener.Prefixes.Add(“http://example1.com:80/”);
// example1.com and example2.com both resolve to the same IP

httplistener.Prefixes.Add(“http://example2.com:80/”);

httplistener.Start(); è System.Net.Sockets.SocketException: Address already
in use

 

 

Furthermore, on .net, that’s not recommended as it would be only possible as
administrator (to bind to port 80 as a non-admin user, you have to set the
urlacl and urlacl only accepts IP address, not dns name).

 

The only possible difference I see between mono and .net is that .net tries
to resolve the queried hostname into a IP address and to match it with its
list of declared binding IPs. Whereas mono doesn’t do it. Shall I open a
ticket in bugzilla?

 

 

De : Ian Norton [mailto:inorton at gmail.com] 
Envoyé : mardi 1 octobre 2013 08:12
À : Kriss Free
Objet : Re: [Mono-list] cannot bind HttpListener to IP address (+ different
behavior in mono / .net)

 

I'm 50% sure that you use the DNS name as the prefix you bind to.

 

On 30 September 2013 21:19, Kriss Free <kriss.free at free.fr> wrote:

Hi all,

 

When I bind a HttpListener to a specific IP address, any url with an
hostname corresponding to that IP that I open in a browser returns a "Bad
Request (Invalid host)" in mono whereas it runs fins in .Net.

 

The long story:

I have a server with two IP addresses. A web server (apache) is bound to the
first IP. I want to make httplistener listen on the second IP 192.168.1.2 to
host two websites example1.com and example2.com. I cannot use
httplistener.Prefixes.Add("http://*:80/") because apache is already
listening on the first IP (this is normal and expected). So I used
httplistener.Prefixes.Add("http://192.168.1.2:80/"). The command runs fine
but:

- with mono, if I open in a browser "http://192.168.1.2" it works, but
"http://www.example1.com" leads to a "Bad Request (Invalid host)". 

- with .Net, both url works correctly.

 

Did I miss something?

 

The tested platforms:

- Mono 3.2.3 on opensuse 12.3

- .NET 4 on Windows 2008R2

 

 


_______________________________________________
Mono-list maillist  -  Mono-list at lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-list/attachments/20131001/a48446bf/attachment.html>


More information about the Mono-list mailing list