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
и получите описание ошибки, чтобы узнать, что происходит с вашим подключением.