Sockets module should compile again on Windows. Fixed asyncio not compiling.
This commit is contained in:
parent
e9604b4433
commit
8dd1a5a181
3 changed files with 28 additions and 40 deletions
|
|
@ -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) =
|
proc testRead(s: PAsyncSocket, no: int) =
|
||||||
echo("Connected! " & $PIntType(arg).val)
|
echo("Reading! " & $no)
|
||||||
|
|
||||||
proc testRead(s: PAsyncSocket, arg: PObject) =
|
|
||||||
echo("Reading! " & $PIntType(arg).val)
|
|
||||||
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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 {.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue