Как отключить флаг TCP PSH в функции POSIX send()?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как отключить флаг TCP PSH в функции POSIX send()?

Сообщение Anonymous »

Я отправляю команды системе шагового двигателя через Ethernet. Команды заставляют двигатель двигаться, или отвечать состоянием привода, или конфигурировать привод и т. д. Система шагового двигателя иногда зависает или не может выполнить команду, и производитель, просмотрев все, что я поставил, сказал мне: отключите флаг PSH на уровне TCP.

Скриншот Wireshark, показывающий использование флага PSH моим кодом:

Изображение



Я использую C++11, который работает в Ubuntu (16.04).

Моя функция отправки выглядит так:

int sendStatusCode = send(socket , *&pointerToMessageAsCharArray , sizeOfMessage , 0);


Я просмотрел описание функции и понял, что последний аргумент (который у меня равен 0) — это флаг. Чего я не понимаю, так это значение, которое мне нужно подключить, чтобы отключить флаг PSH, не меняя ничего больше (если это вообще возможно). Можете ли вы помочь?

Редактировать
Размер сообщений довольно маленький. например:
const char m_ME[5] = {m_HEADER_ONE, m_HEADER_TWO, m_M_HEX, m_E_HEX, m_FOOTER_HEX};

который при отправке выглядит так:
[img]https://i.sstatic .net/MZehJ.png[/img]


Самое большое сообщение, которое я отправляю, состоит из 8 символов, что соответствует 8 байтам.

РЕДАКТИРОВАТЬ
Я реализовал этот ответ (Как отключить алгоритм Нэгла в Linux?) и мне кажется, что TCP_NODELAY не отключает флаг PSH. Код, который я использовал для проверки:

int noDelayState = 1; // 0 means prefer bandwidth optimization over low latency

int tcpPushOptionOff = setsockopt(m_socketRight
, IPPROTO_TCP
, TCP_NODELAY
,(char *) &noDelayState
, sizeof(int));

if (tcpPushOptionOff < 0) { /* do smth */ }


Подробнее здесь: https://stackoverflow.com/questions/554 ... ction-send
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»