doc generation for asyncdispatch works

This commit is contained in:
Araq
2014-04-06 19:36:29 +02:00
parent 5def38ad69
commit a4ccd7b865
3 changed files with 32 additions and 29 deletions

View File

@@ -154,7 +154,7 @@ when defined(windows) or defined(nimdoc):
let p = getGlobalDispatcher()
if CreateIOCompletionPort(sock.THandle, p.ioPort,
cast[TCompletionKey](sock), 1) == 0:
OSError(OSLastError())
osError(osLastError())
p.handles.incl(sock)
proc verifyPresence(sock: TAsyncFD) =
@@ -191,7 +191,7 @@ when defined(windows) or defined(nimdoc):
lpNumberOfBytesTransferred, TOSErrorCode(-1))
dealloc(customOverlapped)
else:
let errCode = OSLastError()
let errCode = osLastError()
if lpOverlapped != nil:
assert customOverlapped.data.sock == lpCompletionKey.TAsyncFD
customOverlapped.data.cb(customOverlapped.data.sock,
@@ -201,7 +201,7 @@ when defined(windows) or defined(nimdoc):
if errCode.int32 == WAIT_TIMEOUT:
# Timed out
discard
else: OSError(errCode)
else: osError(errCode)
var connectExPtr: pointer = nil
var acceptExPtr: pointer = nil
@@ -218,11 +218,11 @@ when defined(windows) or defined(nimdoc):
proc initAll() =
let dummySock = newRawSocket()
if not initPointer(dummySock, connectExPtr, WSAID_CONNECTEX):
OSError(OSLastError())
osError(osLastError())
if not initPointer(dummySock, acceptExPtr, WSAID_ACCEPTEX):
OSError(OSLastError())
osError(osLastError())
if not initPointer(dummySock, getAcceptExSockAddrsPtr, WSAID_GETACCEPTEXSOCKADDRS):
OSError(OSLastError())
osError(osLastError())
proc connectEx(s: TSocketHandle, name: ptr TSockAddr, namelen: cint,
lpSendBuffer: pointer, dwSendDataLength: dword,
@@ -283,7 +283,7 @@ when defined(windows) or defined(nimdoc):
saddr.sin_addr.s_addr = INADDR_ANY
if bindAddr(socket.TSocketHandle, cast[ptr TSockAddr](addr(saddr)),
sizeof(saddr).TSockLen) < 0'i32:
OSError(OSLastError())
osError(osLastError())
var aiList = getAddrInfo(address, port, af)
var success = false
@@ -314,7 +314,7 @@ when defined(windows) or defined(nimdoc):
# free ``ol``.
break
else:
lastError = OSLastError()
lastError = osLastError()
if lastError.int32 == ERROR_IO_PENDING:
# In this case ``ol`` will be deallocated in ``poll``.
success = true
@@ -334,7 +334,7 @@ when defined(windows) or defined(nimdoc):
## Reads **up to** ``size`` bytes from ``socket``. Returned future will
## complete once all the data requested is read, a part of the data has been
## read, or the socket has disconnected in which case the future will
## complete with a value of ``""`.
## complete with a value of ``""``.
# Things to note:
@@ -370,7 +370,7 @@ when defined(windows) or defined(nimdoc):
let ret = WSARecv(socket.TSocketHandle, addr dataBuf, 1, addr bytesReceived,
addr flagsio, cast[POverlapped](ol), nil)
if ret == -1:
let err = OSLastError()
let err = osLastError()
if err.int32 != ERROR_IO_PENDING:
retFuture.fail(newException(EOS, osErrorMsg(err)))
dealloc(ol)
@@ -449,7 +449,7 @@ when defined(windows) or defined(nimdoc):
var retFuture = newFuture[tuple[address: string, client: TAsyncFD]]()
var clientSock = newRawSocket()
if clientSock == OSInvalidSocket: osError(osLastError())
if clientSock == osInvalidSocket: osError(osLastError())
const lpOutputLen = 1024
var lpOutputBuf = newString(lpOutputLen)

View File

@@ -17,7 +17,9 @@ import unsigned, os
when hostos == "solaris":
{.passl: "-lsocket -lnsl".}
when defined(Windows):
const useWinVersion = defined(Windows) or defined(nimdoc)
when useWinVersion:
import winlean
export WSAEWOULDBLOCK
else:
@@ -74,7 +76,7 @@ type
length*: int
addrList*: seq[string]
when defined(windows):
when useWinVersion:
let
osInvalidSocket* = winlean.INVALID_SOCKET
@@ -106,7 +108,7 @@ proc toInt*(typ: TType): cint
proc toInt*(p: TProtocol): cint
## Converts the TProtocol enum to a platform-dependent ``cint``.
when defined(posix):
when not useWinVersion:
proc toInt(domain: TDomain): cint =
case domain
of AF_UNIX: result = posix.AF_UNIX
@@ -150,7 +152,7 @@ proc newRawSocket*(domain: TDomain = AF_INET, typ: TType = SOCK_STREAM,
proc close*(socket: TSocketHandle) =
## closes a socket.
when defined(windows):
when useWinVersion:
discard winlean.closeSocket(socket)
else:
discard posix.close(socket)
@@ -164,7 +166,7 @@ proc listen*(socket: TSocketHandle, backlog = SOMAXCONN): cint {.tags: [FReadIO]
## Marks ``socket`` as accepting connections.
## ``Backlog`` specifies the maximum length of the
## queue of pending connections.
when defined(windows):
when useWinVersion:
result = winlean.listen(socket, cint(backlog))
else:
result = posix.listen(socket, cint(backlog))
@@ -181,8 +183,8 @@ proc getAddrInfo*(address: string, port: TPort, af: TDomain = AF_INET, typ: TTyp
hints.ai_protocol = toInt(prot)
var gaiResult = getAddrInfo(address, $port, addr(hints), result)
if gaiResult != 0'i32:
when defined(windows):
OSError(OSLastError())
when useWinVersion:
osError(osLastError())
else:
raise newException(EOS, $gai_strerror(gaiResult))
@@ -224,7 +226,7 @@ proc getServByName*(name, proto: string): TServent {.tags: [FReadIO].} =
## and the protocol name specified by ``proto`` matches the s_proto member.
##
## On posix this will search through the ``/etc/services`` file.
when defined(Windows):
when useWinVersion:
var s = winlean.getservbyname(name, proto)
else:
var s = posix.getservbyname(name, proto)
@@ -240,7 +242,7 @@ proc getServByPort*(port: TPort, proto: string): TServent {.tags: [FReadIO].} =
## protocol name specified by ``proto`` matches the s_proto member.
##
## On posix this will search through the ``/etc/services`` file.
when defined(Windows):
when useWinVersion:
var s = winlean.getservbyport(ze(int16(port)).cint, proto)
else:
var s = posix.getservbyport(ze(int16(port)).cint, proto)
@@ -255,7 +257,7 @@ proc getHostByAddr*(ip: string): Thostent {.tags: [FReadIO].} =
var myaddr: TInAddr
myaddr.s_addr = inet_addr(ip)
when defined(windows):
when useWinVersion:
var s = winlean.gethostbyaddr(addr(myaddr), sizeof(myaddr).cuint,
cint(rawsockets.AF_INET))
if s == nil: osError(osLastError())
@@ -267,7 +269,7 @@ proc getHostByAddr*(ip: string): Thostent {.tags: [FReadIO].} =
result.name = $s.h_name
result.aliases = cstringArrayToSeq(s.h_aliases)
when defined(windows):
when useWinVersion:
result.addrtype = TDomain(s.h_addrtype)
else:
if s.h_addrtype == posix.AF_INET:
@@ -281,14 +283,14 @@ proc getHostByAddr*(ip: string): Thostent {.tags: [FReadIO].} =
proc getHostByName*(name: string): Thostent {.tags: [FReadIO].} =
## This function will lookup the IP address of a hostname.
when defined(Windows):
when useWinVersion:
var s = winlean.gethostbyname(name)
else:
var s = posix.gethostbyname(name)
if s == nil: osError(osLastError())
result.name = $s.h_name
result.aliases = cstringArrayToSeq(s.h_aliases)
when defined(windows):
when useWinVersion:
result.addrtype = TDomain(s.h_addrtype)
else:
if s.h_addrtype == posix.AF_INET:
@@ -303,7 +305,7 @@ proc getHostByName*(name: string): Thostent {.tags: [FReadIO].} =
proc getSockName*(socket: TSocketHandle): TPort =
## returns the socket's associated port number.
var name: Tsockaddr_in
when defined(Windows):
when useWinVersion:
name.sin_family = int16(ord(AF_INET))
else:
name.sin_family = posix.AF_INET
@@ -337,7 +339,7 @@ proc setBlocking*(s: TSocketHandle, blocking: bool) =
## Sets blocking mode on socket.
##
## Raises EOS on error.
when defined(Windows):
when useWinVersion:
var mode = clong(ord(not blocking)) # 1 for non-blocking, 0 for blocking
if ioctlsocket(s, FIONBIO, addr(mode)) == -1:
osError(osLastError())
@@ -418,4 +420,4 @@ proc selectWrite*(writefds: var seq[TSocketHandle],
when defined(Windows):
var wsa: TWSADATA
if WSAStartup(0x0101'i16, addr wsa) != 0: OSError(OSLastError())
if WSAStartup(0x0101'i16, addr wsa) != 0: osError(osLastError())

View File

@@ -176,9 +176,10 @@ proc rawEchoNL() {.inline, compilerproc.} = write(stdout, "\n")
# interface to the C procs:
when defined(windows) and not defined(useWinAnsi):
when (defined(windows) and not defined(useWinAnsi)) or defined(nimdoc):
include "system/widestrs"
when defined(windows) and not defined(useWinAnsi):
proc wfopen(filename, mode: WideCString): pointer {.
importc: "_wfopen", nodecl.}
proc wfreopen(filename, mode: WideCString, stream: TFile): TFile {.