Replies: 2 comments
-
I found this working lib https://github.com/h3rald/nimhttpd works for ipv6 install : run: |
Beta Was this translation helpful? Give feedback.
0 replies
-
after some test, I have found a solution,
import asynchttpserver, asyncdispatch, asyncnet, net, posix, strformat, strutils
const
port = 8080
host = $IPv6_any() # Listen on all interfaces
proc handleRequest(req: Request): Future[void] {.async.} =
try:
let (clientIP, clientPort) = req.client.getPeerAddr()
let content = fmt"""
<!DOCTYPE html>
<html>
<head><title>Nim Server</title></head>
<body>
<p>Client IP: {clientIP}:{clientPort} </p>
</body>
</html>
"""
await req.respond(Http200, content, newHttpHeaders({
"Content-Type": "text/html; charset=utf-8",
"Connection": "close"
}))
except:
echo "Request error: ", getCurrentExceptionMsg()
when isMainModule:
var server = newAsyncHttpServer()
echo &"Server running on both IPv4 and IPv6 on: {port}"
# Start serving requests
waitFor server.serve(Port(port), handleRequest, host, -1, Domain.AF_INET6) but when I try to use it in HappyX, I am keep geting errors. the code I am trying to change
...
when not defined(enableIPv6): # ⬅️ no need to init socket when enableIPv6
if server == nil:
server = newSocket()
server.setSockOpt(OptReuseAddr, true)
server.setSockOpt(OptReusePort, true)
server.bindAddr(settings.port, settings.bindAddr)
server.listen()
...
template start*(server: Server): untyped =
## The `start` template starts the given server and listens for incoming connections.
## Parameters:
## - `server`: A `Server` instance that needs to be started.
##
## Returns:
## - `untyped`: This template does not return any value.
try:
when enableDebug or exportPython or defined(napibuild):
info "Server started at http://" & `server`.address & ":" & $`server`.port
when not declared(handleRequest):
proc handleRequest(req: Request): Future[void] {.async.} =
discard
when not defined(hpxServeAsync):
when enableHttpx or enableBuiltin:
run(handleRequest, `server`.instance)
elif enableHttpBeast:
{.cast(gcsafe).}:
run(handleRequest, `server`.instance)
else:
when defined(enableIPv6):
echo "running on IPv6: ", `server`.address, `server`.port
waitFor `server`.instance.serve(Port(`server`.port), handleRequest, `server`.address, -1, Domain.AF_INET6)
else:
waitFor `server`.instance.serve(Port(`server`.port), handleRequest, `server`.address)
else:
when enableHttpx or enableBuiltin:
asyncCheck runAsync(handleRequest, `server`.instance)
elif enableHttpBeast:
{.cast(gcsafe).}:
run(handleRequest, `server`.instance)
else:
when defined(enableIPv6):
asyncCheck `server`.instance.serve(Port(`server`.port), handleRequest, `server`.address -1, Domain.AF_INET6)
else:
asyncCheck `server`.instance.serve(Port(`server`.port), handleRequest, `server`.address)
except OSError:
styledEcho fgYellow, "Try to use another port instead of ", $`server`.port
echo getCurrentExceptionMsg()
except:
echo getCurrentExceptionMsg()
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Hi, I am trying to use HappyX to Serve at :: (0.0.0.0 for ipv6) with following code example,
above code failed.
this python code works and I was able to access it(my local machine) from public internet.
Beta Was this translation helpful? Give feedback.
All reactions