Use different try/except construct to enforce returning on error

This commit is contained in:
kdeme 2020-06-30 21:58:23 +02:00
parent 23aa13b03d
commit ffb7923370
No known key found for this signature in database
GPG Key ID: 4E8DD21420AF43F5
1 changed files with 17 additions and 22 deletions

View File

@ -408,30 +408,25 @@ proc receive*(d: Protocol, a: Address, packet: openArray[byte]) {.gcsafe,
proc processClient(transp: DatagramTransport, raddr: TransportAddress):
Future[void] {.async, gcsafe, raises: [Exception, Defect].} =
let proto = getUserData[Protocol](transp)
var ip: IpAddress
var buf = newSeq[byte]()
try:
# TODO: should we use `peekMessage()` to avoid allocation?
# TODO: This can still raise general `Exception` while it probably should
# only give TransportOsError.
buf = transp.getMessage()
let buf = try: transp.getMessage()
except TransportOsError as e:
# This is likely to be local network connection issues.
error "Transport getMessage error", exception = e.name, msg = e.msg
error "Transport getMessage", exception = e.name, msg = e.msg
return
except Exception as e:
if e of Defect:
raise (ref Defect)(e)
else: doAssert(false)
return # Make compiler happy
try:
ip = raddr.address()
except ValueError:
# This should not be possible considering we bind to an IP address.
error "Not a valid IpAddress"
let ip = try: raddr.address()
except ValueError as e:
error "Not a valid IpAddress", exception = e.name, msg = e.msg
return
let a = Address(ip: ValidIpAddress.init(ip), port: raddr.port)
try: