@dom96 What fixed it in the end was using the async methods. Apparently the non-async method is broken in some way.
So, the following does appear to work. import asyncnet, net, asyncdispatch proc main() {.async.} = var ctx = newContext() var next_socket = newAsyncSocket() wrapSocket(ctx, next_socket) await next_socket.connect("google.com", Port(443)) await next_socket.send("GET /") waitFor main() Run I'll be testing more tonight.