diff options
author | Araq <rumpf_a@web.de> | 2011-05-14 21:41:59 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2011-05-14 21:41:59 +0200 |
commit | c9aac521a00bc59bb16538de316579203c2a2dfb (patch) | |
tree | d8320aed4a6364cf5cd91f3cb31e35214f9865a6 /lib/pure/sockets.nim | |
parent | 196c0dd5d3889c5616c7f251364e051431e614e1 (diff) | |
parent | 4fd42d5150fa97d934d782f43433dd2ca2a49b3f (diff) | |
download | Nim-c9aac521a00bc59bb16538de316579203c2a2dfb.tar.gz |
Merge branch 'master' of git@github.com:Araq/Nimrod
Diffstat (limited to 'lib/pure/sockets.nim')
-rwxr-xr-x | lib/pure/sockets.nim | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/lib/pure/sockets.nim b/lib/pure/sockets.nim index 45e4da118..73f57395a 100755 --- a/lib/pure/sockets.nim +++ b/lib/pure/sockets.nim @@ -179,19 +179,27 @@ proc bindAddr*(socket: TSocket, port = TPort(0), address = "") = ## binds an address/port number to a socket. ## Use address string in dotted decimal form like "a.b.c.d" ## or leave "" for any address. - var name: Tsockaddr_in - when defined(Windows): - name.sin_family = int16(ord(AF_INET)) - else: - name.sin_family = posix.AF_INET - name.sin_port = sockets.htons(int16(port)) + if address == "": + var name: Tsockaddr_in + when defined(Windows): + name.sin_family = int16(ord(AF_INET)) + else: + name.sin_family = posix.AF_INET + name.sin_port = sockets.htons(int16(port)) name.sin_addr.s_addr = sockets.htonl(INADDR_ANY) + if bindSocket(cint(socket), cast[ptr TSockAddr](addr(name)), + sizeof(name)) < 0'i32: + OSError() else: - name.sin_addr.s_addr = parseIp4(address) - if bindSocket(cint(socket), cast[ptr TSockAddr](addr(name)), - sizeof(name)) < 0'i32: - OSError() + var hints: TAddrInfo + var aiList: ptr TAddrInfo = nil + hints.ai_family = toInt(AF_INET) + hints.ai_socktype = toInt(SOCK_STREAM) + hints.ai_protocol = toInt(IPPROTO_TCP) + if getAddrInfo(address, $port, addr(hints), aiList) != 0'i32: OSError() + if bindSocket(cint(socket), aiList.ai_addr, aiList.ai_addrLen) < 0'i32: + OSError() when false: proc bindAddr*(socket: TSocket, port = TPort(0)) = |