Спасибо, хорошая идея! Правда, модуль эти байты портит :-D
У него в недрах при пополнении буфера происходит декодирование UTF-8, https://metacpan.org/source/VTI/Protocol-WebSocket-0.19/lib/Protocol/WebSocket/Frame.pm#L84 которое реагирует на двухбайтовую последовательность 00000011,11101000, превращая её в 00000011,11111101. Таким образом, закрывая на сервере соединение с кодом 1000 OK, я получаю на клиенте 1021 OK ;-) $ perl -MEncode -e '$a = pack "n", 1000; $b = Encode::decode("UTF-8",$a); print unpack "n", $b' 1021 Прилагаю скрипт-клиент и скрипт-сервер для наглядности. В Fri, 2 Oct 2015 15:47:43 +0300 Dmitry Smal <[email protected]> пишет: > Нет. Close Frame приходит как обычный кусок данных. > > Я использую примерно такой костыль > > $client->on(read => sub { > > my ($client, $buf) = @_; > > if ($client->{frame_buffer}->opcode == 8) { > > $client->{close_code} = unpack('n', substr($buf, 0, 2)); > > # Вот это не проверял, проверьте! > > $client->{close_reason} = substr($buf, 2); > > # Т.к. использую тектстовый код > > return; > > } > > > On 10/02/2015 01:42 PM, Grigory Batalov wrote: > > Всем привет! > > > > Можно ли в Protocol::WebSocket::Client получить код закрытия сокета, > > как это делается в Mojo::UserAgent ? > > > > $tx->on( > > finish => sub { > > my ( $tx, $code, $reason ) = @_; > > say "WebSocket closed with status ($code) $reason."; > > } > > ); > > > > Мне это нужно для разделения корректно и некорректно закрытых > > соединений. >
test-client.pl
Description: Perl program
test-serv.pl
Description: Perl program
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
