From 66d7091b7994b3e5a1d4ede1b50cbf59780c9c16 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Fri, 24 Nov 2017 16:27:43 +0000 Subject: [PATCH] setBlocking(false) is called on AsyncFD in newAsyncSocket proc. --- changelog.md | 3 ++- lib/pure/asyncnet.nim | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index c43eb8b2c5..cc6732fc1a 100644 --- a/changelog.md +++ b/changelog.md @@ -12,7 +12,8 @@ `getBool`, `getFloat`, `getBiggestInt`. Also `getInt` procedure was added. - `reExtended` is no longer default for the `re` constructor in the `re` module. - +- `newAsyncSocket` taking an `AsyncFD` now runs `setBlocking(false)` on the + fd. ### Library changes diff --git a/lib/pure/asyncnet.nim b/lib/pure/asyncnet.nim index 5be457d2a2..650bb3340b 100644 --- a/lib/pure/asyncnet.nim +++ b/lib/pure/asyncnet.nim @@ -140,9 +140,18 @@ proc newAsyncSocket*(fd: AsyncFD, domain: Domain = AF_INET, sockType: SockType = SOCK_STREAM, protocol: Protocol = IPPROTO_TCP, buffered = true): AsyncSocket = ## Creates a new ``AsyncSocket`` based on the supplied params. + ## + ## The supplied ``fd``'s non-blocking state will be enabled implicitly. + ## + ## **Note**: This procedure will **NOT** register ``fd`` with the global + ## async dispatcher. You need to do this manually. If you have used + ## ``newAsyncNativeSocket`` to create ``fd`` then it's already registered. + ## The reason for this is that the ``AsyncFD`` type is a special type for an + ## FD that signifies that its been registered. assert fd != osInvalidSocket.AsyncFD new(result) result.fd = fd.SocketHandle + fd.SocketHandle.setBlocking(false) result.isBuffered = buffered result.domain = domain result.sockType = sockType