данные застревают в очереди отправки
Хотелось бы знать, какие средства можно использовать для устранения этой проблемы.< /p>
Ниже находится функция отправки.
Код: Выделить всё
erpc_status_t TCPTransport::underlyingSend(const uint8_t *data, uint32_t size, void *arg)
{
int socket = (NULL == arg) ? m_socket : *(int *)arg;
if (socket < 0)
{
return kErpcStatus_InvalidArgument;
}
// Loop until all data is sent.
while (size)
{
#ifndef WIN32
ssize_t result = write(socket, data, size);
#else
int result = send_Data(socket, (char *)data, size, 0);
#endif
if (result >= 0)
{
size -= result;
data += result;
}
else
{
if (errno == EPIPE)
{
// Server closed.
//close();
TCP_DEBUG_ERR("underlyingSend() connect closed.");
return kErpcStatus_ConnectionClosed;
}
TCP_DEBUG_ERR("underlyingSend() send failed.");
return kErpcStatus_SendFailed;
}
}
return kErpcStatus_Success;
}
[1]: https://github.com/EmbeddedRPC/erpc/blo ... nsport.cpp
Мне нужно добавить некоторые подробности. Я провел тест связи на предмет аномальных соединений. Когда в системе не запускались другие программы, тест провел 2 000 000 попыток связи без каких-либо отклонений. Однако проблема возникает, когда система работает как единое целое. Поэтому я все еще подозреваю, что проблема может быть вызвана перегрузкой системы или сети. Мы также попытались отследить уровень использования системных ресурсов, и это указывает на то, что ресурсов ЦП и памяти должно быть достаточно.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ve-timeout
Мобильная версия