diff --git a/websocket-sharp/Ext.cs b/websocket-sharp/Ext.cs
index ff85a42cf..9df2373bd 100644
--- a/websocket-sharp/Ext.cs
+++ b/websocket-sharp/Ext.cs
@@ -506,7 +506,7 @@ internal static bool IsData (this Opcode opcode)
internal static bool IsPortNumber (this int value)
{
- return value > 0 && value < 65536;
+ return value > -1 && value < 65536;
}
internal static bool IsReserved (this ushort code)
diff --git a/websocket-sharp/Server/WebSocketServer.cs b/websocket-sharp/Server/WebSocketServer.cs
index 9657da323..7b3613111 100644
--- a/websocket-sharp/Server/WebSocketServer.cs
+++ b/websocket-sharp/Server/WebSocketServer.cs
@@ -123,7 +123,7 @@ public WebSocketServer ()
/// on which to listen.
///
///
- /// is less than 1 or greater than 65535.
+ /// is less than 0 or greater than 65535.
///
public WebSocketServer (int port)
: this (port, port == 443)
@@ -213,12 +213,12 @@ public WebSocketServer (string url)
/// secure connections; otherwise, false.
///
///
- /// is less than 1 or greater than 65535.
+ /// is less than 0 or greater than 65535.
///
public WebSocketServer (int port, bool secure)
{
if (!port.IsPortNumber ()) {
- var msg = "Less than 1 or greater than 65535.";
+ var msg = "Less than 0 or greater than 65535.";
throw new ArgumentOutOfRangeException ("port", msg);
}
@@ -965,6 +965,11 @@ private void startReceiving ()
_receiveThread = new Thread (new ThreadStart (receiveRequest));
_receiveThread.IsBackground = true;
_receiveThread.Start ();
+
+ if (_port == 0)
+ {
+ _port = ((System.Net.IPEndPoint)_listener.LocalEndpoint).Port;
+ }
}
private void stop (ushort code, string reason)