0

我想尝试 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

4

1 回答 1

0

如果您正在谈论 TCP 连接,那么您的程序的行为可能是正确的。

这里涉及到几件事,因为你说你建立了连接并且“正在积极倾听”。不能两者兼而有之。

如果您建立连接,我唯一能想到的是通常connect(低级别,不是 modbus)会尝试几次(连接后)发送SYN数据包(大约两分钟),如果没有响应,则丢弃联系。

这可能是一个问题。

如果您正在监听,则必须设置 SO_REUSEADDR 套接字选项。

在任何情况下,您都应该验证errno并获取错误描述,以了解您的连接发生了什么。

于 2020-07-08T16:47:04.383 回答