Отправка фрейма закрытия WebSocket Linux C

340
29 августа 2017, 13:40

Пишу простой Socket server под Linux на С. Столкнулся к непонятной для меня проблемой.

//открываю socket
//жду подключения
//обрабатываю заголовок
//соединение установлено, тестовые данные отправляются отлично
//хочу закрыть соединение
//формирую биты закрытия. На моей машине char 1 байт.
char close_soket[4] = {0x88,0x02,0x00,0x00};
//отправляю
int send_data = send(data_socket, close_soket,4,0);
//обрабатываю ошибки
//закрываю soket  

При отправке закрывающего фрейма у клиента (браузер, код на js) должно сработать событие onClose(стандартная функция WebSocket) о чистом закрытии, но закрытие происходит экстренное с кодом 1006. Пробовал формировать и следующий фрейм закрытия с кодом закрытия и сообщением:

char close_soket[6] = {0x88,0x04,0x3e,0x8,'C','l'};  

В этом варианте такая же ошибка.

Код клиента:

var socket = new WebSocket("ws://ip:port");
  socket.onopen  = function() {
    console.log("Connection success"); //срабатывает во всех случаях
  };
  socket.onclose = function(event) {
    if (event.wasClean) {
      console.log("Close connection");
    } else {
      console.log("Hard close connection"); //срабатывает с ошибкой 1006 
    }
    console.log("Code: " + event.code + "\nreason: " + event.reason);
  }
  socket.onmessage = function(event) {
    console.log("Recv data: " + event.data);
  }
  socket.onerror = function(error) {
    console.log("Error: " + error.message);
  }
READ ALSO
Найти id родителя Javascript

Найти id родителя Javascript

Есть такой код

262
как добавить несколько yAxis в nvd3 js

как добавить несколько yAxis в nvd3 js

Как получить такое расположение координат?

265
Как заключить обширный html в переменную? [дубликат]

Как заключить обширный html в переменную? [дубликат]

На данный вопрос уже ответили:

249