C++ уменьшает время ожидания modbus_connect

Я хотел бы попробовать 10 немедленных подключений Modbus. Однако каждый раз, когда мне не удается подключиться, мне приходится ждать 2 минуты для следующего подключения, потому что предыдущий вызов modbus_connect все еще активно прослушивает. Итак, если я не смогу подключиться 10 раз, мне придется ждать 20 минут.

int max_tries = 10;
int retries = 0;
while ((modbus_connect(ctx) == -1) && retries < max_retries){
    retries++;
    // wait 2 mins
    // I need to remove this waiting time
}

Может ли кто-нибудь помочь мне сократить время ожидания? Я использую Libmodbus v3.1.6

1 ответ

Если вы говорите о TCP-соединениях, поведение вашей программы может быть правильным.

Здесь задействовано несколько вещей, потому что вы говорите, что устанавливаете соединение, и "активно слушаете". Не может быть и того, и другого.

Если вы установите соединение, единственное, о чем я могу думать, это то, что обычно connect (низкий уровень, не Modbus) несколько раз (после подключения) попытается отправить SYN пакетов (более или менее двух минут), и если нет ответа, разорвать соединение.

Это может быть одна проблема.

Если вы слушаете, вы должны установить опцию сокета SO_REUSEADDR.

В любом случае вам следует проверить errno и получите описание ошибки, чтобы узнать, что происходит с вашим подключением.

Другие вопросы по тегам