summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2012-08-12 20:25:30 +0100
committerDominik Picheta <dominikpicheta@googlemail.com>2012-08-12 20:25:30 +0100
commit8dd1a5a1818584535edbb3cbf90c599cf4b9eefc (patch)
treea8e13911a2747792c9afcb0f744ef57275dbd685
parente9604b4433cac0627086b1b28983546ed033e41e (diff)
downloadNim-8dd1a5a1818584535edbb3cbf90c599cf4b9eefc.tar.gz
Sockets module should compile again on Windows. Fixed asyncio not compiling.
-rw-r--r--lib/pure/asyncio.nim60
-rwxr-xr-xlib/pure/sockets.nim4
-rwxr-xr-xlib/windows/winlean.nim6
3 files changed, 29 insertions, 41 deletions
diff --git a/lib/pure/asyncio.nim b/lib/pure/asyncio.nim
index f31fe912a..113b1d080 100644
--- a/lib/pure/asyncio.nim
+++ b/lib/pure/asyncio.nim
@@ -417,59 +417,47 @@ proc len*(disp: PDispatcher): int =
   return disp.delegates.len
 
 when isMainModule:
-  type
-    PIntType = ref TIntType
-    TIntType = object of TObject
-      val: int
-
-    PMyArg = ref TMyArg
-    TMyArg = object of TObject
-      dispatcher: PDispatcher
-      val: int
-
-  proc testConnect(s: PAsyncSocket, arg: PObject) =
-    echo("Connected! " & $PIntType(arg).val)
+
+  proc testConnect(s: PAsyncSocket, no: int) =
+    echo("Connected! " & $no)
   
-  proc testRead(s: PAsyncSocket, arg: PObject) =
-    echo("Reading! " & $PIntType(arg).val)
+  proc testRead(s: PAsyncSocket, no: int) =
+    echo("Reading! " & $no)
     var data = s.getSocket.recv()
     if data == "":
-      echo("Closing connection. " & $PIntType(arg).val)
+      echo("Closing connection. " & $no)
       s.close()
     echo(data)
-    echo("Finished reading! " & $PIntType(arg).val)
+    echo("Finished reading! " & $no)
 
-  proc testAccept(s: PAsyncSocket, arg: PObject) =
-    echo("Accepting client! " & $PMyArg(arg).val)
+  proc testAccept(s: PAsyncSocket, disp: PDispatcher, no: int) =
+    echo("Accepting client! " & $no)
     var client: PAsyncSocket
     new(client)
     var address = ""
     s.acceptAddr(client, address)
     echo("Accepted ", address)
-    client.handleRead = testRead
-    var userArg: PIntType
-    new(userArg)
-    userArg.val = 78
-    client.userArg = userArg
-    PMyArg(arg).dispatcher.register(client)
+    client.handleRead = 
+      proc (s: PAsyncSocket) =
+        testRead(s, 2)
+    disp.register(client)
 
   var d = newDispatcher()
   
-  var userArg: PIntType
-  new(userArg)
-  userArg.val = 0
-  var s = AsyncSocket(userArg = userArg)
+  var s = AsyncSocket()
   s.connect("amber.tenthbit.net", TPort(6667))
-  s.handleConnect = testConnect
-  s.handleRead = testRead
+  s.handleConnect = 
+    proc (s: PAsyncSocket) =
+      testConnect(s, 1)
+  s.handleRead = 
+    proc (s: PAsyncSocket) =
+      testRead(s, 1)
   d.register(s)
   
-  var userArg1: PMyArg
-  new(userArg1)
-  userArg1.val = 1
-  userArg1.dispatcher = d
-  var server = AsyncSocket(userArg = userArg1)
-  server.handleAccept = testAccept
+  var server = AsyncSocket()
+  server.handleAccept =
+    proc (s: PAsyncSocket) = 
+      testAccept(s, d, 78)
   server.bindAddr(TPort(5555))
   server.listen()
   d.register(server)
diff --git a/lib/pure/sockets.nim b/lib/pure/sockets.nim
index d6b69d4c8..28f0a325e 100755
--- a/lib/pure/sockets.nim
+++ b/lib/pure/sockets.nim
@@ -1218,7 +1218,7 @@ proc recvFrom*(socket: TSocket, data: var string, length: int,
   data = newString(length)
   var sockAddress: Tsockaddr_in
   var addrLen = sizeof(sockAddress).TSockLen
-  result = recvFrom(socket.fd, cstring(data), length, flags,
+  result = recvFrom(socket.fd, cstring(data), length.cint, flags.cint,
                     cast[ptr TSockAddr](addr(sockAddress)), addr(addrLen))
   
   if result != -1:
@@ -1326,7 +1326,7 @@ proc sendTo*(socket: TSocket, address: string, port: TPort, data: pointer,
   var success = false
   var it = aiList
   while it != nil:
-    result = sendTo(socket.fd, data, size.cint, flags, it.ai_addr,
+    result = sendTo(socket.fd, data, size.cint, flags.cint, it.ai_addr,
                     it.ai_addrlen.TSockLen)
     if result != -1'i32:
       success = true
diff --git a/lib/windows/winlean.nim b/lib/windows/winlean.nim
index 4c0671df5..1ea00c737 100755
--- a/lib/windows/winlean.nim
+++ b/lib/windows/winlean.nim
@@ -451,15 +451,15 @@ proc listen*(s: TWinSocket, backlog: cint): cint {.
 proc recv*(s: TWinSocket, buf: pointer, len, flags: cint): cint {.
   stdcall, importc: "recv", dynlib: ws2dll.}
 proc recvfrom*(s: TWinSocket, buf: cstring, len, flags: cint, 
-               fromm: ptr TSockAddr, fromlen: ptr cint): cint {.
+               fromm: ptr TSockAddr, fromlen: ptr Tsocklen): cint {.
   stdcall, importc: "recvfrom", dynlib: ws2dll.}
 proc select*(nfds: cint, readfds, writefds, exceptfds: ptr TFdSet,
              timeout: ptr TTimeval): cint {.
   stdcall, importc: "select", dynlib: ws2dll.}
 proc send*(s: TWinSocket, buf: pointer, len, flags: cint): cint {.
   stdcall, importc: "send", dynlib: ws2dll.}
-proc sendto*(s: TWinSocket, buf: cstring, len, flags: cint,
-             to: ptr TSockAddr, tolen: cint): cint {.
+proc sendto*(s: TWinSocket, buf: pointer, len, flags: cint,
+             to: ptr TSockAddr, tolen: Tsocklen): cint {.
   stdcall, importc: "sendto", dynlib: ws2dll.}
 
 proc shutdown*(s: TWinSocket, how: cint): cint {.