mirror of
https://github.com/status-im/nim-chronos.git
synced 2025-03-03 20:30:39 +00:00
Exceptions and handles fixes.
This commit is contained in:
parent
454571f943
commit
939e461d04
@ -42,48 +42,37 @@ proc setSocketBlocking*(s: SocketHandle, blocking: bool): bool =
|
|||||||
proc setSockOpt*(socket: AsyncFD, level, optname, optval: int): bool =
|
proc setSockOpt*(socket: AsyncFD, level, optname, optval: int): bool =
|
||||||
## `setsockopt()` for integer options.
|
## `setsockopt()` for integer options.
|
||||||
## Returns ``true`` on success, ``false`` on error.
|
## Returns ``true`` on success, ``false`` on error.
|
||||||
result = true
|
|
||||||
var value = cint(optval)
|
var value = cint(optval)
|
||||||
if setsockopt(SocketHandle(socket), cint(level), cint(optname), addr(value),
|
result = setsockopt(SocketHandle(socket), cint(level), cint(optname),
|
||||||
sizeof(value).SockLen) < 0'i32:
|
addr(value), SockLen(sizeof(value))) >= cint(0)
|
||||||
result = false
|
|
||||||
|
|
||||||
proc setSockOpt*(socket: AsyncFD, level, optname: int, value: pointer,
|
proc setSockOpt*(socket: AsyncFD, level, optname: int, value: pointer,
|
||||||
valuelen: int): bool =
|
valuelen: int): bool =
|
||||||
## `setsockopt()` for custom options (pointer and length).
|
## `setsockopt()` for custom options (pointer and length).
|
||||||
## Returns ``true`` on success, ``false`` on error.
|
## Returns ``true`` on success, ``false`` on error.
|
||||||
result = true
|
result = setsockopt(SocketHandle(socket), cint(level), cint(optname), value,
|
||||||
if setsockopt(SocketHandle(socket), cint(level), cint(optname), value,
|
SockLen(valuelen)) >= cint(0)
|
||||||
Socklen(valuelen)) < 0'i32:
|
|
||||||
result = false
|
|
||||||
|
|
||||||
proc getSockOpt*(socket: AsyncFD, level, optname: int, value: var int): bool =
|
proc getSockOpt*(socket: AsyncFD, level, optname: int, value: var int): bool =
|
||||||
## `getsockopt()` for integer options.
|
## `getsockopt()` for integer options.
|
||||||
## Returns ``true`` on success, ``false`` on error.
|
## Returns ``true`` on success, ``false`` on error.
|
||||||
var res: cint
|
var res: cint
|
||||||
var size = sizeof(res).SockLen
|
var size = SockLen(sizeof(res))
|
||||||
result = true
|
|
||||||
if getsockopt(SocketHandle(socket), cint(level), cint(optname),
|
if getsockopt(SocketHandle(socket), cint(level), cint(optname),
|
||||||
addr(res), addr(size)) < 0'i32:
|
addr(res), addr(size)) >= cint(0):
|
||||||
return false
|
|
||||||
value = int(res)
|
value = int(res)
|
||||||
|
result = true
|
||||||
|
|
||||||
proc getSockOpt*(socket: AsyncFD, level, optname: int, value: pointer,
|
proc getSockOpt*(socket: AsyncFD, level, optname: int, value: pointer,
|
||||||
valuelen: var int): bool =
|
valuelen: var int): bool =
|
||||||
## `getsockopt()` for custom options (pointer and length).
|
## `getsockopt()` for custom options (pointer and length).
|
||||||
## Returns ``true`` on success, ``false`` on error.
|
## Returns ``true`` on success, ``false`` on error.
|
||||||
var res: cint
|
result = getsockopt(SocketHandle(socket), cint(level), cint(optname),
|
||||||
result = true
|
value, cast[ptr Socklen](addr valuelen)) >= cint(0)
|
||||||
if getsockopt(SocketHandle(socket), cint(level), cint(optname),
|
|
||||||
value, cast[ptr Socklen](addr valuelen)) < 0'i32:
|
|
||||||
result = false
|
|
||||||
|
|
||||||
proc getSocketError*(socket: AsyncFD, err: var int): bool =
|
proc getSocketError*(socket: AsyncFD, err: var int): bool =
|
||||||
## Recover error code associated with socket handle ``socket``.
|
## Recover error code associated with socket handle ``socket``.
|
||||||
if not getSockOpt(socket, cint(SOL_SOCKET), cint(SO_ERROR), err):
|
result = getSockOpt(socket, cint(SOL_SOCKET), cint(SO_ERROR), err)
|
||||||
result = false
|
|
||||||
else:
|
|
||||||
result = true
|
|
||||||
|
|
||||||
proc createAsyncSocket*(domain: Domain, sockType: SockType,
|
proc createAsyncSocket*(domain: Domain, sockType: SockType,
|
||||||
protocol: Protocol): AsyncFD =
|
protocol: Protocol): AsyncFD =
|
||||||
|
@ -83,9 +83,9 @@ type
|
|||||||
|
|
||||||
AsyncStreamRW* = AsyncStreamReader | AsyncStreamWriter
|
AsyncStreamRW* = AsyncStreamReader | AsyncStreamWriter
|
||||||
|
|
||||||
AsyncStreamError* = object of Exception
|
AsyncStreamError* = object of CatchableError
|
||||||
AsyncStreamIncompleteError* = object of AsyncStreamError
|
AsyncStreamIncompleteError* = object of AsyncStreamError
|
||||||
AsyncStreamIncorrectError* = object of AsyncStreamError
|
AsyncStreamIncorrectError* = object of Defect
|
||||||
AsyncStreamLimitError* = object of AsyncStreamError
|
AsyncStreamLimitError* = object of AsyncStreamError
|
||||||
AsyncStreamReadError* = object of AsyncStreamError
|
AsyncStreamReadError* = object of AsyncStreamError
|
||||||
par*: ref Exception
|
par*: ref Exception
|
||||||
|
Loading…
x
Reference in New Issue
Block a user