diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2014-04-05 23:30:16 +0100 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@googlemail.com> | 2014-04-05 23:30:16 +0100 |
commit | 4d2f1396cb1074fc843069fb456c468c0abd6b35 (patch) | |
tree | 4124c700f1d6663b212fcba04cecc26d8700094e | |
parent | 51c203bab096eb739734208358d6c8aec3b5da1f (diff) | |
download | Nim-4d2f1396cb1074fc843069fb456c468c0abd6b35.tar.gz |
Revent pruneSocketSet to efficient version.
-rw-r--r-- | lib/pure/sockets.nim | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/pure/sockets.nim b/lib/pure/sockets.nim index d978e99b1..b6acc329f 100644 --- a/lib/pure/sockets.nim +++ b/lib/pure/sockets.nim @@ -926,12 +926,16 @@ proc createFdSet(fd: var TFdSet, s: seq[TSocket], m: var int) = FD_SET(i.fd, fd) proc pruneSocketSet(s: var seq[TSocket], fd: var TFdSet) = - var newSet: seq[TSocket] = @[] - for sock in s: - if FD_ISSET(sock.fd, fd) == 1'i32: - ## Is set. - newSet.add(sock) - s = newSet + var i = 0 + var L = s.len + while i < L: + if FD_ISSET(s[i].fd, fd) == 0'i32: + # not set. + s[i] = s[L-1] + dec(L) + else: + inc(i) + setLen(s, L) proc hasDataBuffered*(s: TSocket): bool = ## Determines whether a socket has data buffered. |