Implements nativesockets.accept.
This commit is contained in:
parent
66d7091b79
commit
e5a27c96fb
3 changed files with 20 additions and 9 deletions
|
|
@ -187,12 +187,12 @@ proc toSockType*(protocol: Protocol): SockType =
|
|||
proc newNativeSocket*(domain: Domain = AF_INET,
|
||||
sockType: SockType = SOCK_STREAM,
|
||||
protocol: Protocol = IPPROTO_TCP): SocketHandle =
|
||||
## Creates a new socket; returns `InvalidSocket` if an error occurs.
|
||||
## Creates a new socket; returns `osInvalidSocket` if an error occurs.
|
||||
socket(toInt(domain), toInt(sockType), toInt(protocol))
|
||||
|
||||
proc newNativeSocket*(domain: cint, sockType: cint,
|
||||
protocol: cint): SocketHandle =
|
||||
## Creates a new socket; returns `InvalidSocket` if an error occurs.
|
||||
## Creates a new socket; returns `osInvalidSocket` if an error occurs.
|
||||
##
|
||||
## Use this overload if one of the enums specified above does
|
||||
## not contain what you need.
|
||||
|
|
@ -666,6 +666,19 @@ proc selectWrite*(writefds: var seq[SocketHandle],
|
|||
|
||||
pruneSocketSet(writefds, (wr))
|
||||
|
||||
proc accept*(fd: SocketHandle): (SocketHandle, string) =
|
||||
## Accepts a new client connection.
|
||||
##
|
||||
## Returns (osInvalidSocket, "") if an error occurred.
|
||||
var sockAddress: Sockaddr_in
|
||||
var addrLen = sizeof(sockAddress).SockLen
|
||||
var sock = accept(fd, cast[ptr SockAddr](addr(sockAddress)),
|
||||
addr(addrLen))
|
||||
if sock == osInvalidSocket:
|
||||
return (osInvalidSocket, "")
|
||||
else:
|
||||
return (sock, $inet_ntoa(sockAddress.sin_addr))
|
||||
|
||||
when defined(Windows):
|
||||
var wsa: WSAData
|
||||
if wsaStartup(0x0101'i16, addr wsa) != 0: raiseOSError(osLastError())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue