aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Nehab <diego.nehab@gmail.com>2012-04-23 01:29:41 +0800
committerDiego Nehab <diego.nehab@gmail.com>2012-04-23 01:29:41 +0800
commit966642f76abeea579ddcf8da8651244fcf5cbd5a (patch)
tree03411cecb6c385dc45f34ce6e2bbd41f557676a0
parentf960b3872a668ed1b53bd50c5b6a708367332f3c (diff)
downloadluasocket-966642f76abeea579ddcf8da8651244fcf5cbd5a.tar.gz
luasocket-966642f76abeea579ddcf8da8651244fcf5cbd5a.tar.bz2
luasocket-966642f76abeea579ddcf8da8651244fcf5cbd5a.zip
socket.connect() loops over addresses returned by getaddrinfo
-rw-r--r--src/socket.lua36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/socket.lua b/src/socket.lua
index a9219b0..9035443 100644
--- a/src/socket.lua
+++ b/src/socket.lua
@@ -19,20 +19,30 @@ function connect(address, port, laddress, lport)
19 if address == "*" then address = "0.0.0.0" end 19 if address == "*" then address = "0.0.0.0" end
20 local addrinfo, err = socket.dns.getaddrinfo(address); 20 local addrinfo, err = socket.dns.getaddrinfo(address);
21 if not addrinfo then return nil, err end 21 if not addrinfo then return nil, err end
22 local sock, err; 22 local err = "no info on address"
23 if addrinfo[1].family == "inet" then 23 local sock, res
24 sock, err = socket.tcp() 24 for i, alt in base.ipairs(addrinfo) do
25 else 25 if alt.family == "inet" then
26 sock, err = socket.tcp6() 26 sock, err = socket.tcp()
27 end 27 else
28 if not sock then return nil, err end 28 sock, err = socket.tcp6()
29 if laddress then 29 end
30 local res, err = sock:bind(laddress, lport, -1) 30 if not sock then return nil, err end
31 if not res then return nil, err end 31 if laddress then
32 res, err = sock:bind(laddress, lport)
33 if not res then
34 sock:close()
35 return nil, err
36 end
37 end
38 res, err = sock:connect(alt.addr, port)
39 if not res then
40 sock:close()
41 else
42 return sock
43 end
32 end 44 end
33 local res, err = sock:connect(address, port) 45 return nil, err
34 if not res then return nil, err end
35 return sock
36end 46end
37 47
38function bind(host, port, backlog) 48function bind(host, port, backlog)