aboutsummaryrefslogtreecommitdiff
path: root/src/socket.lua
diff options
context:
space:
mode:
authorSam Roberts <vieuxtech@gmail.com>2012-05-10 14:14:22 -0700
committerSam Roberts <vieuxtech@gmail.com>2012-05-10 14:14:22 -0700
commit156669c28bc62bfddbd5625c4bb4c1f8da94802b (patch)
tree074ea57dd044a9bed306464af8c9f141bdf0ca19 /src/socket.lua
parent3d3e69c6e43f6431969e072e78df43b0ab73c48d (diff)
downloadluasocket-156669c28bc62bfddbd5625c4bb4c1f8da94802b.tar.gz
luasocket-156669c28bc62bfddbd5625c4bb4c1f8da94802b.tar.bz2
luasocket-156669c28bc62bfddbd5625c4bb4c1f8da94802b.zip
socket.connect now implemented in the C core
This avoid socket.lua duplicating the iteration over the results of getaddrinfo(). Some problems with the C implementation not initializing sockets or the luasocket family have also been fixed, and error reporting made more robust.
Diffstat (limited to 'src/socket.lua')
-rw-r--r--src/socket.lua34
1 files changed, 6 insertions, 28 deletions
diff --git a/src/socket.lua b/src/socket.lua
index 8c5f231..e8def75 100644
--- a/src/socket.lua
+++ b/src/socket.lua
@@ -15,34 +15,12 @@ module("socket")
15----------------------------------------------------------------------------- 15-----------------------------------------------------------------------------
16-- Exported auxiliar functions 16-- Exported auxiliar functions
17----------------------------------------------------------------------------- 17-----------------------------------------------------------------------------
18function connect(address, port, laddress, lport) 18function connect4(address, port, laddress, lport)
19 if address == "*" then address = "0.0.0.0" end 19 return socket.connect(address, port, laddress, lport, "inet")
20 local addrinfo, err = socket.dns.getaddrinfo(address); 20end
21 if not addrinfo then return nil, err end 21
22 local sock, res 22function connect6(address, port, laddress, lport)
23 err = "no info on address" 23 return socket.connect(address, port, laddress, lport, "inet6")
24 for i, alt in base.ipairs(addrinfo) do
25 if alt.family == "inet" then
26 sock, err = socket.tcp()
27 else
28 sock, err = socket.tcp6()
29 end
30 if not sock 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
44 end
45 return nil, err
46end 24end
47 25
48function bind(host, port, backlog) 26function bind(host, port, backlog)