diff options
author | Araq <rumpf_a@web.de> | 2014-09-16 22:49:21 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-09-16 22:49:21 +0200 |
commit | 32b582bb0013ec59ed56fd825bcf7f21692cabcc (patch) | |
tree | c2d0311b431422497c737e17fd9914caf010f4ca | |
parent | 297647affeca558e19899191089af35ba31db8ac (diff) | |
parent | efca06c71c47eb636aacefe97e5816dc2e1082ff (diff) | |
download | Nim-32b582bb0013ec59ed56fd825bcf7f21692cabcc.tar.gz |
Merge branch 'bigbreak' of https://github.com/Araq/Nimrod into bigbreak
-rw-r--r-- | lib/pure/asynchttpserver.nim | 2 | ||||
-rw-r--r-- | lib/pure/asyncnet.nim | 4 | ||||
-rw-r--r-- | lib/pure/net.nim | 8 | ||||
-rw-r--r-- | lib/pure/rawsockets.nim | 8 | ||||
-rw-r--r-- | readme.md | 6 | ||||
-rw-r--r-- | readme.txt | 8 |
6 files changed, 19 insertions, 17 deletions
diff --git a/lib/pure/asynchttpserver.nim b/lib/pure/asynchttpserver.nim index 9de0a6268..257fbaeb5 100644 --- a/lib/pure/asynchttpserver.nim +++ b/lib/pure/asynchttpserver.nim @@ -116,7 +116,7 @@ proc sendStatus(client: PAsyncSocket, status: string): Future[void] = proc processClient(client: PAsyncSocket, address: string, callback: proc (request: TRequest): Future[void] {.closure, gcsafe.}) {.async.} = - while true: + while not client.closed: # GET /path HTTP/1.1 # Header: val # \n diff --git a/lib/pure/asyncnet.nim b/lib/pure/asyncnet.nim index a16111349..c6918517e 100644 --- a/lib/pure/asyncnet.nim +++ b/lib/pure/asyncnet.nim @@ -67,7 +67,8 @@ type # PAsyncSocket* {.borrow: `.`.} = distinct PSocket. But that doesn't work. AsyncSocketDesc = object fd*: SocketHandle - case isBuffered*: bool # determines whether this socket is buffered. + closed*: bool ## determines whether this socket has been closed + case isBuffered*: bool ## determines whether this socket is buffered. of true: buffer*: array[0..BufferSize, char] currPos*: int # current index in buffer @@ -400,6 +401,7 @@ proc close*(socket: PAsyncSocket) = raiseSslError() elif res != 1: raiseSslError() + socket.closed = true # TODO: Add extra debugging checks for this. when defined(ssl): proc wrapSocket*(ctx: SslContext, socket: AsyncSocket) = diff --git a/lib/pure/net.nim b/lib/pure/net.nim index 55ddf4bc2..886ed792f 100644 --- a/lib/pure/net.nim +++ b/lib/pure/net.nim @@ -287,11 +287,11 @@ proc bindAddr*(socket: Socket, port = Port(0), address = "") {. name.sin_port = htons(int16(port)) name.sin_addr.s_addr = htonl(INADDR_ANY) if bindAddr(socket.fd, cast[ptr SockAddr](addr(name)), - sizeof(name).Socklen) < 0'i32: + sizeof(name).SockLen) < 0'i32: raiseOSError(osLastError()) else: var aiList = getAddrInfo(address, port, AF_INET) - if bindAddr(socket.fd, aiList.ai_addr, aiList.ai_addrlen.Socklen) < 0'i32: + if bindAddr(socket.fd, aiList.ai_addr, aiList.ai_addrlen.SockLen) < 0'i32: dealloc(aiList) raiseOSError(osLastError()) dealloc(aiList) @@ -315,7 +315,7 @@ proc acceptAddr*(server: Socket, client: var Socket, address: var string, ## accept will be called again. assert(client != nil) var sockAddress: Sockaddr_in - var addrLen = sizeof(sockAddress).Socklen + var addrLen = sizeof(sockAddress).SockLen var sock = accept(server.fd, cast[ptr SockAddr](addr(sockAddress)), addr(addrLen)) @@ -754,7 +754,7 @@ proc recvFrom*(socket: Socket, data: var string, length: int, # TODO: Buffered sockets data.setLen(length) - var sockAddress: SockAddrIn + var sockAddress: Sockaddr_in var addrLen = sizeof(sockAddress).SockLen result = recvfrom(socket.fd, cstring(data), length.cint, flags.cint, cast[ptr SockAddr](addr(sockAddress)), addr(addrLen)) diff --git a/lib/pure/rawsockets.nim b/lib/pure/rawsockets.nim index 7e293f490..c76e99fcb 100644 --- a/lib/pure/rawsockets.nim +++ b/lib/pure/rawsockets.nim @@ -162,7 +162,7 @@ proc close*(socket: SocketHandle) = # TODO: These values should not be discarded. An EOS should be raised. # http://stackoverflow.com/questions/12463473/what-happens-if-you-call-close-on-a-bsd-socket-multiple-times -proc bindAddr*(socket: SocketHandle, name: ptr SockAddr, namelen: Socklen): cint = +proc bindAddr*(socket: SocketHandle, name: ptr SockAddr, namelen: SockLen): cint = result = bindSocket(socket, name, namelen) proc listen*(socket: SocketHandle, backlog = SOMAXCONN): cint {.tags: [ReadIOEffect].} = @@ -314,7 +314,7 @@ proc getSockName*(socket: SocketHandle): Port = name.sin_family = posix.AF_INET #name.sin_port = htons(cint16(port)) #name.sin_addr.s_addr = htonl(INADDR_ANY) - var namelen = sizeof(name).Socklen + var namelen = sizeof(name).SockLen if getsockname(socket, cast[ptr SockAddr](addr(name)), addr(namelen)) == -1'i32: raiseOSError(osLastError()) @@ -324,7 +324,7 @@ proc getSockOptInt*(socket: SocketHandle, level, optname: int): int {. tags: [ReadIOEffect].} = ## getsockopt for integer options. var res: cint - var size = sizeof(res).Socklen + var size = sizeof(res).SockLen if getsockopt(socket, cint(level), cint(optname), addr(res), addr(size)) < 0'i32: raiseOSError(osLastError()) @@ -335,7 +335,7 @@ proc setSockOptInt*(socket: SocketHandle, level, optname, optval: int) {. ## setsockopt for integer options. var value = cint(optval) if setsockopt(socket, cint(level), cint(optname), addr(value), - sizeof(value).Socklen) < 0'i32: + sizeof(value).SockLen) < 0'i32: raiseOSError(osLastError()) proc setBlocking*(s: SocketHandle, blocking: bool) = diff --git a/readme.md b/readme.md index 83d6ef748..7c6fc8e45 100644 --- a/readme.md +++ b/readme.md @@ -30,9 +30,9 @@ To build from source you will need: If you are on a fairly modern *nix system, the following steps should work: ``` -$ git clone git://github.com/Araq/Nim.git -$ cd Nim -$ git clone --depth 1 git://github.com/nim-code/csources +$ git clone git://github.com/Araq/Nimrod.git +$ cd Nimrod +$ git clone --depth 1 git://github.com/nimrod-code/csources $ cd csources && sh build.sh $ cd .. $ bin/nim c koch diff --git a/readme.txt b/readme.txt index 21448b71b..7c6fc8e45 100644 --- a/readme.txt +++ b/readme.txt @@ -30,10 +30,10 @@ To build from source you will need: If you are on a fairly modern *nix system, the following steps should work: ``` -$ git clone git://github.com/Araq/Nim.git -$ cd Nim -$ git clone --depth 1 git://github.com/nim-code/csources -$ cd csources && ./build.sh +$ git clone git://github.com/Araq/Nimrod.git +$ cd Nimrod +$ git clone --depth 1 git://github.com/nimrod-code/csources +$ cd csources && sh build.sh $ cd .. $ bin/nim c koch $ ./koch boot -d:release |