aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2017-02-18 15:39:42 +0200
committerOskari Timperi <oskari.timperi@iki.fi>2017-02-18 15:39:42 +0200
commita378aa66d14b1de86df65bc02b411e8858ec620a (patch)
treee4026976111067b0d4a00ff12e87cc3346956b0f
parent1cd48156bb1f8a9afd7a280b0820389592907f2a (diff)
downloadmqtt-a378aa66d14b1de86df65bc02b411e8858ec620a.tar.gz
mqtt-a378aa66d14b1de86df65bc02b411e8858ec620a.zip
Add timeout param to MqttClientRunOnce()
Also change SocketSelect() to take timeout in milliseconds.
-rw-r--r--src/client.c11
-rw-r--r--src/mqtt.h2
-rw-r--r--src/socket.c4
3 files changed, 11 insertions, 6 deletions
diff --git a/src/client.c b/src/client.c
index 3aba76c..c9fa876 100644
--- a/src/client.c
+++ b/src/client.c
@@ -282,7 +282,7 @@ int MqttClientDisconnect(MqttClient *client)
return MqttClientQueueSimplePacket(client, MqttPacketTypeDisconnect);
}
-int MqttClientRunOnce(MqttClient *client)
+int MqttClientRunOnce(MqttClient *client, int timeout)
{
int rv;
int events;
@@ -312,7 +312,12 @@ int MqttClientRunOnce(MqttClient *client)
LOG_DEBUG("selecting");
- rv = SocketSelect(client->stream.sock, &events, client->keepAlive);
+ if (timeout <= 0)
+ {
+ timeout = client->keepAlive * 1000;
+ }
+
+ rv = SocketSelect(client->stream.sock, &events, timeout);
if (rv == -1)
{
@@ -390,7 +395,7 @@ int MqttClientRun(MqttClient *client)
while (!client->stopped)
{
- if (MqttClientRunOnce(client) == -1)
+ if (MqttClientRunOnce(client, -1) == -1)
return -1;
}
diff --git a/src/mqtt.h b/src/mqtt.h
index d7b62c9..4ea0930 100644
--- a/src/mqtt.h
+++ b/src/mqtt.h
@@ -73,7 +73,7 @@ int MqttClientConnect(MqttClient *client, const char *host, short port,
int MqttClientDisconnect(MqttClient *client);
-int MqttClientRunOnce(MqttClient *client);
+int MqttClientRunOnce(MqttClient *client, int timeout);
int MqttClientRun(MqttClient *client);
diff --git a/src/socket.c b/src/socket.c
index e161f53..64a7c01 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -154,8 +154,8 @@ int SocketSelect(int sock, int *events, int timeout)
}
memset(&tv, 0, sizeof(tv));
- tv.tv_sec = timeout;
- tv.tv_usec = 0;
+ tv.tv_sec = timeout / 1000;
+ tv.tv_usec = (timeout - (tv.tv_sec * 1000)) * 1000;
*events = 0;