I'm either getting a crash or binary output (presumably encrypted).
Does anyone know how/when should I be calling wrapsocket?
Thanks!
# -d:ssl compile switch needed
import asyncnet, asyncdispatch, net, os
var clients {.threadvar.}: seq[AsyncSocket]
var sslContext = newContext(protVersion = protTLSv1, verifyMode = CVerifyPeer, certFile = "ssl_cert", keyFile = "ssl_key")
assert defined(ssl)
proc processClient(client: AsyncSocket) {.async.} =
while true:
let data = await client.recv(5)
echo "server" & $data.len & data
# echo " " & data
proc serve() {.async.} =
clients = @[]
var server = newAsyncSocket()
sslContext.wrapSocket(server)
server.setSockOpt( OptReuseAddr, true )
server.bindAddr(Port(9991))
server.listen()
while true:
let client = await server.accept()
clients.add client
sslContext.wrapSocket(client) # this line crashes, as does wrapConnectedSocket
asyncCheck processClient(client)
proc client() {.async.} =
var s = newAsyncSocket()
sslContext.wrapSocket(s)
echo "client connect"
await s.connect("localhost", Port(9991))
echo "client send"
await s.send("some data")
echo "client done"
#
#
#
asyncCheck serve()
sleep(1000)
asyncCheck client()
runForever()
asyncserverTwo.nim(63) asyncserverTwo
asyncdispatch.nim(1617) runForever
asyncdispatch.nim(1032) poll
asyncdispatch.nim(1209) cb
asyncdispatch.nim(213) complete
asyncdispatch.nim(267) :anonymous
asyncnet.nim(301) :anonymous
asyncdispatch.nim(213) complete
asyncdispatch.nim(267) :anonymous
asyncnet.nim(317) :anonymous
asyncdispatch.nim(213) complete
asyncdispatch.nim(1269) cb
asyncdispatch.nim(242) fail
asyncdispatch.nim(331) :anonymous
Error: unhandled exception: error:140DF114:SSL routines:SSL_read:uninitialized
Hi Dom, thanks - but in that case (crash line removed) I get a lot of binary data - possibly the encrypted data at first, but far too much so something else must be going on.
client connect
server5
server5
server5
�A�
server5��2e
<erver5i�L
server5+,Z�
server5ͺ��
server5
���
server5f�
server5v�
...etc for 230 bytes.
This is the simplest solution I've found (i don't get much time from fighting my own fires ;-).