diff --git a/websocket-sharp/Server/HttpServer.cs b/websocket-sharp/Server/HttpServer.cs
index df824ca1..507722ef 100644
--- a/websocket-sharp/Server/HttpServer.cs
+++ b/websocket-sharp/Server/HttpServer.cs
@@ -1040,12 +1040,63 @@ namespace WebSocketSharp.Server
/// A that represents the reason for the WebSocket
/// connection close. The size must be 123 bytes or less.
///
+ ///
+ ///
+ /// is less than 1000 or greater than 4999.
+ ///
+ ///
+ /// -or-
+ ///
+ ///
+ /// The size of is greater than 123 bytes.
+ ///
+ ///
+ ///
+ ///
+ /// is 1010 (mandatory extension).
+ ///
+ ///
+ /// -or-
+ ///
+ ///
+ /// is 1005 (no status) and
+ /// there is .
+ ///
+ ///
+ /// -or-
+ ///
+ ///
+ /// could not be UTF-8-encoded.
+ ///
+ ///
public void Stop (ushort code, string reason)
{
- string msg;
- if (!WebSocket.CheckParametersForClose (code, reason, false, out msg)) {
- _log.Error (msg);
- return;
+ if (!code.IsCloseStatusCode ()) {
+ var msg = "Less than 1000 or greater than 4999.";
+ throw new ArgumentOutOfRangeException ("code", msg);
+ }
+
+ if (code == 1010) {
+ var msg = "1010 cannot be used.";
+ throw new ArgumentException (msg, "code");
+ }
+
+ if (!reason.IsNullOrEmpty ()) {
+ if (code == 1005) {
+ var msg = "1005 cannot be used.";
+ throw new ArgumentException (msg, "code");
+ }
+
+ byte[] bytes;
+ if (!reason.TryGetUTF8EncodedBytes (out bytes)) {
+ var msg = "It could not be UTF-8-encoded.";
+ throw new ArgumentException (msg, "reason");
+ }
+
+ if (bytes.Length > 123) {
+ var msg = "Its size is greater than 123 bytes.";
+ throw new ArgumentOutOfRangeException ("reason", msg);
+ }
}
stop (code, reason);