Сбой Poco Websocket в sendFrame API после применения «запрещающего» правила ipfw - PullRequest
0 голосов
/ 06 марта 2019

У меня запущены клиентские и серверные процессы.Клиент использует библиотеку Poco для связи и получения данных с сервера.

В случае отсутствия данных клиент и сервер обмениваются сообщениями для пинг-понга.

Постановка задачи: У меня CLIENT-1 модуль (написан на C ++ / Poco), а SERVER-1 - сервер.

  1. Изначально все работает нормально, и они общаются.
  2. SERVER-1 отправляет сообщения ping, а CLIENT-1 отвечает сообщением pong.
  3. Теперь, если я создаю правило «ipfw» для блокировки исходящих данных с устройства CLIENT-1 на SERVER-1, тогда API «sendFrame»произойдет сбой при отправке ответа pong.

Я пытался:

a) обработка исключений, но нет catchable-исключение с помощью catch (std ::исключение) "и" catch (...) "

b) попытался выполнить команду poll с другим флагом, но сокет возвращает правильное состояние.

c) другие способы найти состояние сокета.

Здесь ничего не помогло.

Пожалуйста, помогите мне разрешитьЕсли это проблема ИЛИ дайте мне знать, если это ограничение или известна проблема со стороны POCO.

Код образца:

URI websocket_uri_object(ws_url);

HTTPSClientSession websocket_session(websocket_uri_object.getHost(), websocket_uri_object.getPort()); 
websocket_session.setKeepAlive(true);

Poco::Net::HTTPRequest ws_request(Poco::Net::HTTPRequest::HTTP_GET, websocket_uri_object.getPath(),Poco::Net::HTTPMessage::HTTP_1_1);

HTTPBasicCredentials cred(username, password); 
cred.authenticate(ws_request);
ws_request.setKeepAlive(true); 
Poco::Net:: HTTPResponse ws_response;
Poco::Net::WebSocket *ws = new Poco::Net::WebSocket(websocket_session, ws_request, ws_response);

//--- sending data ---
//-- some ping/ pong ---
//--- IPFW rule to block outgoing packets ----
// Sample rule: ipfw add 00010 deny ip from CLIENT-1_IP to SERVER-1_IP

received_data_size = ws->receiveFrame(subscriber_update_buffer, flags);  //---- > getting ping.
ws->sendFrame(pong_data_ptr, pong_size, PONG_FLAGS); // --- > sending pong i.e. a empty data of size 0 --> program crashing here.
...