Thanks for the explanations, guys. I changed the code to 4000 for
errors and 1000 for successful exits, and everything is now working as
I expected.

It looks like jetty-9's WebSocketSession provides the same close() and
close(code, message) methods? While these work well enough if you're
familiar with the RFC, I think it would be nice to provide a
close(boolean isClean, String reason) method. Then, internally, this
would call either close(1000, reason) or close(UNKNOWN_ERROR, reason),
where UNKNOWN_ERROR is 4000, 4999, some other 4xxx, or a special
JETTY_UNKNOWN_ERROR close code registered with IANA in the 3000-3999
range.

Optionally, close(reason) could also be implemented as close(false, reason).

Thoughts?

On Tue, Oct 30, 2012 at 2:11 PM, Joakim Erdfelt <[email protected]> wrote:
>
> Quick answer, if you want a reason message, you have to specify a valid, can 
> be sent over the wire, close status code.
>
> Detail answer,
> The WebSocket spec (RFC 6455, Section 5.5.1. Close)
> https://tools.ietf.org/html/rfc6455#section-5.5.1
>
> A Close frame MAY contain a body.
> If there is a body, the first two bytes of the body MUST be a 2-byte unsigned 
> integer representing the status code.
> Following the 2-byte integer, the body MAY contain UTF-8 encoded data with 
> reason.
>
> And the status codes allowed to be sent over the wire are in Section 7.4.1.
> https://tools.ietf.org/html/rfc6455#section-7.4.1
>
> Some status codes are not allowed to be sent over the network. (They 
> essentially are internal status codes).
>
> --
> Joakim Erdfelt <[email protected]>
> webtide.com
> Developer advice, services and support
> from the Jetty & CometD experts
> eclipse.org/jetty - cometd.org
>
>
>
> On Tue, Oct 30, 2012 at 1:22 PM, Brandon Mintern <[email protected]> wrote:
>>
>> When a connection is closed with a message and closeCode <= 0, the message 
>> is not sent at all. This is because of the test in line 382 of 
>> WebSocketGeneratorRFC6455.java:
>>
>> _outbound.addFrame((byte)FLAG_FIN,WebSocketConnectionRFC6455.OP_CLOSE,bytes,0,code>0?bytes.length:0);
>>
>> Is this intended behavior? As a user, I expected that calling 
>> connection.close(-1, "reason for closure") would populate a Javascript 
>> ErrorEvent with:
>>
>> wasClean: false
>> reason: "reason for closure"
>>
>> Instead, reason is "". If this is intended behavior, I think the Javadoc 
>> needs some elaboration; it reads:
>>
>>
>> org.eclipse.jetty.websocket.WebSocket.Connection
>>
>> public void close(int closeCode, String message)
>>
>> Close the connection with specific closeCode and message.
>>
>> Parameters:
>> closeCode - The close code to send, or -1 for no close code
>> message - The message to send or null for no message
>>
>>
>> As implemented, message is never sent unless closeCode > 0.
>>
>> _______________________________________________
>> jetty-users mailing list
>> [email protected]
>> https://dev.eclipse.org/mailman/listinfo/jetty-users
>>
>
>
> _______________________________________________
> jetty-users mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/jetty-users
>
_______________________________________________
jetty-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to