add getprotobyname (#15273)

* add getprotobyname

* tests, docs, changelog

* add since
This commit is contained in:
flywind 2020-09-09 18:47:22 +08:00 • committed by GitHub
commit 8c82144ba5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 0 deletions

View file

@ -13,6 +13,8 @@
# TODO: Clean up the exports a bit and everything else in general.
import os, options
import std/private/since
when hostOS == "solaris":
{.passl: "-lsocket -lnsl".}
@ -199,6 +201,18 @@ proc toSockType*(protocol: Protocol): SockType =
of IPPROTO_IP, IPPROTO_IPV6, IPPROTO_RAW, IPPROTO_ICMP, IPPROTO_ICMPV6:
SOCK_RAW
proc getProtoByName*(name: string): int {.since: (1, 3, 5).} =
## Returns a protocol code from the database that matches the protocol ``name``.
when useWinVersion:
let protoent = winlean.getprotobyname(name.cstring)
else:
let protoent = posix.getprotobyname(name.cstring)
if protoent == nil:
raise newException(OsError, "protocol not found")
result = protoent.p_proto.int
proc close*(socket: SocketHandle) =
## Closes a socket.
when useWinVersion: