tarantool / mqtt

Tarantool MQTT client
tarantool.org
BSD 2-Clause "Simplified" License
38 stars 10 forks source link

Very long waiting period when connection is impossible #30

Open vvzvlad opened 5 years ago

vvzvlad commented 5 years ago

If the server is not responding, but not refused connection, the library will wait a very long time.

Code:

mqtt=require('mqtt')
m=mqtt.new()
m:connect{host="mail.ru"}

The above code will wait a very long time to complete the last command.

I use a workaround to check availability:

   local conn = socket.tcp_connect(mqtt_host, mqtt_port, 2)
   if (conn ~= nil) then
      conn:close()
      mqtt_object = mqtt.new(mqtt_name, true)
      local mqtt_status, mqtt_err = mqtt_object:connect({host=mqtt_host, port=mqtt_port})
      ...
   else
      error('Connect to host '..mqtt_host..' failed')
   end

socket.tcp_connect will return nil if the port is unavailable after 2 seconds, thus anticipating a long wait. It would be nice if the MQTT library allowed you to set a timeout after which the connection is considered unsuccessful.

dedok commented 5 years ago

Hi,

It's good idea, thank you! It will be implemented, but I'm not sure about ETA.