Sockets module should compile again on Windows. Fixed asyncio not compiling.

This commit is contained in:
Dominik Picheta 2012-08-12 20:25:30 +01:00
commit 8dd1a5a181
3 changed files with 28 additions and 40 deletions

View file

@ -417,59 +417,47 @@ proc len*(disp: PDispatcher): int =
return disp.delegates.len return disp.delegates.len
when isMainModule: when isMainModule:
type
PIntType = ref TIntType
TIntType = object of TObject
val: int
PMyArg = ref TMyArg proc testConnect(s: PAsyncSocket, no: int) =
TMyArg = object of TObject echo("Connected! " & $no)
dispatcher: PDispatcher
val: int
proc testConnect(s: PAsyncSocket, arg: PObject) =
echo("Connected! " & $PIntType(arg).val)
proc testRead(s: PAsyncSocket, arg: PObject) = proc testRead(s: PAsyncSocket, no: int) =
echo("Reading! " & $PIntType(arg).val) echo("Reading! " & $no)
var data = s.getSocket.recv() var data = s.getSocket.recv()
if data == "": if data == "":
echo("Closing connection. " & $PIntType(arg).val) echo("Closing connection. " & $no)
s.close() s.close()
echo(data) echo(data)
echo("Finished reading! " & $PIntType(arg).val) echo("Finished reading! " & $no)
proc testAccept(s: PAsyncSocket, arg: PObject) = proc testAccept(s: PAsyncSocket, disp: PDispatcher, no: int) =
echo("Accepting client! " & $PMyArg(arg).val) echo("Accepting client! " & $no)
var client: PAsyncSocket var client: PAsyncSocket
new(client) new(client)
var address = "" var address = ""
s.acceptAddr(client, address) s.acceptAddr(client, address)
echo("Accepted ", address) echo("Accepted ", address)
client.handleRead = testRead client.handleRead =
var userArg: PIntType proc (s: PAsyncSocket) =
new(userArg) testRead(s, 2)
userArg.val = 78 disp.register(client)
client.userArg = userArg
PMyArg(arg).dispatcher.register(client)
var d = newDispatcher() var d = newDispatcher()
var userArg: PIntType var s = AsyncSocket()
new(userArg)
userArg.val = 0
var s = AsyncSocket(userArg = userArg)
s.connect("amber.tenthbit.net", TPort(6667)) s.connect("amber.tenthbit.net", TPort(6667))
s.handleConnect = testConnect s.handleConnect =
s.handleRead = testRead proc (s: PAsyncSocket) =
testConnect(s, 1)
s.handleRead =
proc (s: PAsyncSocket) =
testRead(s, 1)
d.register(s) d.register(s)
var userArg1: PMyArg var server = AsyncSocket()
new(userArg1) server.handleAccept =
userArg1.val = 1 proc (s: PAsyncSocket) =
userArg1.dispatcher = d testAccept(s, d, 78)
var server = AsyncSocket(userArg = userArg1)
server.handleAccept = testAccept
server.bindAddr(TPort(5555)) server.bindAddr(TPort(5555))
server.listen() server.listen()
d.register(server) d.register(server)

View file

@ -1218,7 +1218,7 @@ proc recvFrom*(socket: TSocket, data: var string, length: int,
data = newString(length) data = newString(length)
var sockAddress: Tsockaddr_in var sockAddress: Tsockaddr_in
var addrLen = sizeof(sockAddress).TSockLen 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)) cast[ptr TSockAddr](addr(sockAddress)), addr(addrLen))
if result != -1: if result != -1:
@ -1326,7 +1326,7 @@ proc sendTo*(socket: TSocket, address: string, port: TPort, data: pointer,
var success = false var success = false
var it = aiList var it = aiList
while it != nil: 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) it.ai_addrlen.TSockLen)
if result != -1'i32: if result != -1'i32:
success = true success = true

View file

@ -451,15 +451,15 @@ proc listen*(s: TWinSocket, backlog: cint): cint {.
proc recv*(s: TWinSocket, buf: pointer, len, flags: cint): cint {. proc recv*(s: TWinSocket, buf: pointer, len, flags: cint): cint {.
stdcall, importc: "recv", dynlib: ws2dll.} stdcall, importc: "recv", dynlib: ws2dll.}
proc recvfrom*(s: TWinSocket, buf: cstring, len, flags: cint, 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.} stdcall, importc: "recvfrom", dynlib: ws2dll.}
proc select*(nfds: cint, readfds, writefds, exceptfds: ptr TFdSet, proc select*(nfds: cint, readfds, writefds, exceptfds: ptr TFdSet,
timeout: ptr TTimeval): cint {. timeout: ptr TTimeval): cint {.
stdcall, importc: "select", dynlib: ws2dll.} stdcall, importc: "select", dynlib: ws2dll.}
proc send*(s: TWinSocket, buf: pointer, len, flags: cint): cint {. proc send*(s: TWinSocket, buf: pointer, len, flags: cint): cint {.
stdcall, importc: "send", dynlib: ws2dll.} stdcall, importc: "send", dynlib: ws2dll.}
proc sendto*(s: TWinSocket, buf: cstring, len, flags: cint, proc sendto*(s: TWinSocket, buf: pointer, len, flags: cint,
to: ptr TSockAddr, tolen: cint): cint {. to: ptr TSockAddr, tolen: Tsocklen): cint {.
stdcall, importc: "sendto", dynlib: ws2dll.} stdcall, importc: "sendto", dynlib: ws2dll.}
proc shutdown*(s: TWinSocket, how: cint): cint {. proc shutdown*(s: TWinSocket, how: cint): cint {.