Hello,

Can you try to change your error detection. You wrote this:

   local connected, con_err = sock:connect("x.x.x.x",80);
   if con_err ~= nil then
      core.log(core.alert,"connect() failed with error: '" .. con_err

Can you write this:

   local connected, con_err = sock:connect("x.x.x.x",80);
   if connected = nil then
      core.log(core.alert,"connect() failed with error: '" .. con_err

If the connect is a succes, the con_err is not set, so its no reliable
to test this variable.

I dont thing that this action fix your issue, but I don't known the
bahavior if you test an uninitilized stack entry.

I try to reproduce your behavior

Thierry


On Tue, 1 Sep 2015 11:01:45 -04local00
Michael Ezzell <[email protected]> wrote:

> I have been thoroughly enjoying teaching my haproxy new tricks with Lua,
> but trying sockets for the first time, using 1.6-dev4, I'm confused by what
> I see.  The behavior is the same whether I try this in "task" or "action"
> context.
> 
> I see this in the release notes:
> 
>     - BUG/MEDIUM: lua: outgoing connection was broken since 1.6-dev2
> 
> ...which seems applicable, but in 1.6-dev4-61d301f I'm not having luck with
> outgoing sockets.
> 
> I wouldn't be surprised if I'm doin' it wrong.  Another perspective would
> be appreciated.
> 
> function tricky_socket()
>         local sock = core.tcp();
>         sock:settimeout(3);
>         core.log(core.alert,"calling connect()\n");
>         local connected, con_err = sock:connect("x.x.x.x",80);
>         core.log(core.alert,"returned from connect()\n");
>         if con_err ~= nil then
>           core.log(core.alert,"connect() failed with error: '" .. con_err
> .. "'\n");
>         end
>  ...
> 
> I removed the rest, since the above captures the essence of the problem.
> This apparently fails:
> 
> Sep  1 14:15:41 localhost haproxy[25480]: calling connect()
> Sep  1 14:15:44 localhost haproxy[25480]: returned from connect()
> Sep  1 14:15:44 localhost haproxy[25480]: connect() failed with error:
> 'Can't connect'
> 
> However, it actually did make a connection, because now I have this:
> 
> tcp        0      0 10.10.10.10:43368         x.x.x.x:80       TIME_WAIT
> 
> In fact, during the 3 seconds, it was ESTABLISHED.  The other side saw the
> connection, too:
> 
> Sep  1 14:15:44 localhost haproxy[1033]: 10.10.10.10:43368
> [01/Sep/2015:14:15:41.680] ... -1/-1/-1/-1/3001 400 ... CR-- "<BADREQ>"
> 
> Network issues can be reasonably ruled out, since I can talk to the far end
> with curl and http-over-telnet, no problem... and, in fact, the original
> destination wasn't another haproxy -- I switched the destination so I could
> confirm what I suspected... which was that the socket is connecting, almost
> immediately, yet for reasons that aren't clear, it doesn't seem to realize
> it.
> 
> Ubuntu 14.04.2 LTS 3.13.0-58-generic #97-Ubuntu SMP
> HA-Proxy version 1.6-dev4-61d301f 2015/08/30
> Lua 5.3.1  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> 
> make TARGET=linux2628 CPU=native USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 \
>      USE_LUA=yes LUA_LIB=/opt/lua53/lib/ LUA_INC=/opt/lua53/include/
> LDFLAGS=-ldl

Reply via email to