diff options
| author | Diego Nehab <diego.nehab@gmail.com> | 2012-05-10 23:16:38 -0700 |
|---|---|---|
| committer | Diego Nehab <diego.nehab@gmail.com> | 2012-05-10 23:16:38 -0700 |
| commit | 399bdb7f412bd9cc565090f30e3872d8b72d66d8 (patch) | |
| tree | 074ea57dd044a9bed306464af8c9f141bdf0ca19 /src/socket.lua | |
| parent | 3d3e69c6e43f6431969e072e78df43b0ab73c48d (diff) | |
| parent | 156669c28bc62bfddbd5625c4bb4c1f8da94802b (diff) | |
| download | luasocket-399bdb7f412bd9cc565090f30e3872d8b72d66d8.tar.gz luasocket-399bdb7f412bd9cc565090f30e3872d8b72d66d8.tar.bz2 luasocket-399bdb7f412bd9cc565090f30e3872d8b72d66d8.zip | |
Merge pull request #12 from sam-github/fix-connect6-and-do-connect-in-c
socket.connect now implemented in the C core
Diffstat (limited to 'src/socket.lua')
| -rw-r--r-- | src/socket.lua | 34 |
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 | ----------------------------------------------------------------------------- |
| 18 | function connect(address, port, laddress, lport) | 18 | function 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); | 20 | end |
| 21 | if not addrinfo then return nil, err end | 21 | |
| 22 | local sock, res | 22 | function 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 | ||
| 46 | end | 24 | end |
| 47 | 25 | ||
| 48 | function bind(host, port, backlog) | 26 | function bind(host, port, backlog) |
