diff --git a/websocket-sharp/Server/WebSocketServer.cs b/websocket-sharp/Server/WebSocketServer.cs
index c5864913..e7ef8a34 100644
--- a/websocket-sharp/Server/WebSocketServer.cs
+++ b/websocket-sharp/Server/WebSocketServer.cs
@@ -1365,15 +1365,66 @@ namespace WebSocketSharp.Server
/// A that represents the reason for
/// the close. The size must be 123 bytes or less in UTF-8.
///
+ ///
+ ///
+ /// 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.
+ ///
+ ///
///
/// The underlying has failed to stop.
///
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);