summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-09-16 22:49:21 +0200
committerAraq <rumpf_a@web.de>2014-09-16 22:49:21 +0200
commit32b582bb0013ec59ed56fd825bcf7f21692cabcc (patch)
treec2d0311b431422497c737e17fd9914caf010f4ca
parent297647affeca558e19899191089af35ba31db8ac (diff)
parentefca06c71c47eb636aacefe97e5816dc2e1082ff (diff)
downloadNim-32b582bb0013ec59ed56fd825bcf7f21692cabcc.tar.gz
Merge branch 'bigbreak' of https://github.com/Araq/Nimrod into bigbreak
-rw-r--r--lib/pure/asynchttpserver.nim2
-rw-r--r--lib/pure/asyncnet.nim4
-rw-r--r--lib/pure/net.nim8
-rw-r--r--lib/pure/rawsockets.nim8
-rw-r--r--readme.md6
-rw-r--r--readme.txt8
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