From 5d8d1ed8bc0a08d6e04c3f10c0bdac4118070685 Mon Sep 17 00:00:00 2001 From: Erik O'Leary Date: Sun, 19 Jan 2014 10:51:21 -0600 Subject: [PATCH 1/2] Corrected prunesocketset and pruneprocessset fd sets passed to select() were pruning ready FDs rather than pruning UN-ready FDs. --- lib/pure/ftpclient.nim | 4 ++-- lib/pure/irc.nim | 2 +- lib/pure/osproc.nim | 2 +- lib/pure/scgi.nim | 2 +- lib/pure/sockets.nim | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/pure/ftpclient.nim b/lib/pure/ftpclient.nim index b6127a9bc6..d9f9dfd3d1 100644 --- a/lib/pure/ftpclient.nim +++ b/lib/pure/ftpclient.nim @@ -298,7 +298,7 @@ proc getLines(ftp: PFTPClient, async: bool = false): bool = var readSocks: seq[TSocket] = @[ftp.getCSock()] # This is only needed here. Asyncio gets this socket... blockingOperation(ftp.getCSock()): - if readSocks.select(1) != 0 and ftp.getCSock() notin readSocks: + if readSocks.select(1) != 0 and ftp.getCSock() in readSocks: assertReply ftp.expectReply(), "226" return true @@ -434,7 +434,7 @@ proc getFile(ftp: PFTPClient, async = false): bool = if not async: var readSocks: seq[TSocket] = @[ftp.getCSock()] blockingOperation(ftp.getCSock()): - if readSocks.select(1) != 0 and ftp.getCSock() notin readSocks: + if readSocks.select(1) != 0 and ftp.getCSock() in readSocks: assertReply ftp.expectReply(), "226" return true diff --git a/lib/pure/irc.nim b/lib/pure/irc.nim index ee85d9c691..d7af0a33a0 100644 --- a/lib/pure/irc.nim +++ b/lib/pure/irc.nim @@ -346,7 +346,7 @@ proc poll*(irc: PIRC, ev: var TIRCEvent, var line = TaintedString"" var socks = @[irc.sock] var ret = socks.select(timeout) - if socks.len() == 0 and ret != 0: + if socks.len() != 0: irc.sock.readLine(line) ev = irc.processLine(line.string) result = true diff --git a/lib/pure/osproc.nim b/lib/pure/osproc.nim index 7b59deec7a..6c43dc2d9e 100644 --- a/lib/pure/osproc.nim +++ b/lib/pure/osproc.nim @@ -800,7 +800,7 @@ elif not defined(useNimRtl): var i = 0 var L = s.len while i < L: - if FD_ISSET(cint(s[i].outHandle), fd) != 0'i32: + if FD_ISSET(cint(s[i].outHandle), fd) == 0'i32: s[i] = s[L-1] dec(L) else: diff --git a/lib/pure/scgi.nim b/lib/pure/scgi.nim index b18fe0094d..04b77fafea 100644 --- a/lib/pure/scgi.nim +++ b/lib/pure/scgi.nim @@ -119,7 +119,7 @@ proc next*(s: var TScgistate, timeout: int = -1): bool = ## request, if ``timeout`` is `-1` then this function will never time out. ## Returns `True` if a new request has been processed. var rsocks = @[s.server] - if select(rsocks, timeout) == 1 and rsocks.len == 0: + if select(rsocks, timeout) == 1 and rsocks.len == 1: new(s.client) accept(s.server, s.client) var L = 0 diff --git a/lib/pure/sockets.nim b/lib/pure/sockets.nim index b56153cc07..b3cc38ee70 100644 --- a/lib/pure/sockets.nim +++ b/lib/pure/sockets.nim @@ -928,7 +928,7 @@ proc pruneSocketSet(s: var seq[TSocket], fd: var TFdSet) = var i = 0 var L = s.len while i < L: - if FD_ISSET(s[i].fd, fd) != 0'i32: + if FD_ISSET(s[i].fd, fd) == 0'i32: s[i] = s[L-1] dec(L) else: From 34f7eca8f714b6d1c162cde138d1fc1e8f656cfe Mon Sep 17 00:00:00 2001 From: onionhammer Date: Sun, 19 Jan 2014 10:55:33 -0600 Subject: [PATCH 2/2] Added ret != 0 back --- lib/pure/irc.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pure/irc.nim b/lib/pure/irc.nim index d7af0a33a0..750c98516b 100644 --- a/lib/pure/irc.nim +++ b/lib/pure/irc.nim @@ -346,7 +346,7 @@ proc poll*(irc: PIRC, ev: var TIRCEvent, var line = TaintedString"" var socks = @[irc.sock] var ret = socks.select(timeout) - if socks.len() != 0: + if socks.len() != 0 and ret != 0: irc.sock.readLine(line) ev = irc.processLine(line.string) result = true