summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2014-04-05 23:30:16 +0100
committerDominik Picheta <dominikpicheta@googlemail.com>2014-04-05 23:30:16 +0100
commit4d2f1396cb1074fc843069fb456c468c0abd6b35 (patch)
tree4124c700f1d6663b212fcba04cecc26d8700094e
parent51c203bab096eb739734208358d6c8aec3b5da1f (diff)
downloadNim-4d2f1396cb1074fc843069fb456c468c0abd6b35.tar.gz
Revent pruneSocketSet to efficient version.
-rw-r--r--lib/pure/sockets.nim16
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.