Пишу простой 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);
}
Продвижение своими сайтами как стратегия роста и независимости