summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2014-04-15 13:51:25 +0100
committerDominik Picheta <dominikpicheta@googlemail.com>2014-04-15 13:51:25 +0100
commit21d0cc8cdf432b0eaf0bd6ea16d00070ab9dab89 (patch)
treeb7a54e0ca35c336dce49f259b1f40b50a024b9be
parent817337af304b8cdf8b96754ae039044840333a02 (diff)
downloadNim-21d0cc8cdf432b0eaf0bd6ea16d00070ab9dab89.tar.gz
Add checks for invalid socket when creating sockets.
-rw-r--r--compiler/service.nim1
-rw-r--r--lib/pure/ftpclient.nim2
-rw-r--r--lib/pure/httpclient.nim1
-rw-r--r--lib/pure/irc.nim2
-rw-r--r--lib/pure/scgi.nim1
-rw-r--r--lib/pure/selectors.nim1
-rw-r--r--tests/stdlib/tsockets.nim1
7 files changed, 9 insertions, 0 deletions
diff --git a/compiler/service.nim b/compiler/service.nim
index 42c4aa9f4..2b861e1c7 100644
--- a/compiler/service.nim
+++ b/compiler/service.nim
@@ -84,6 +84,7 @@ proc serve*(action: proc (){.nimcall.}) =
   of "tcp", "":
     when useCaas:
       var server = socket()
+      if server == invalidSocket: osError(osLastError())
       let p = getConfigVar("server.port")
       let port = if p.len > 0: parseInt(p).TPort else: 6000.TPort
       server.bindAddr(port, getConfigVar("server.address"))
diff --git a/lib/pure/ftpclient.nim b/lib/pure/ftpclient.nim
index f136e0016..3bb55239b 100644
--- a/lib/pure/ftpclient.nim
+++ b/lib/pure/ftpclient.nim
@@ -107,6 +107,7 @@ proc ftpClient*(address: string, port = TPort(21),
   result.isAsync = false
   result.dsockConnected = false
   result.csock = socket()
+  if result.csock == InvalidSocket: osError(osLastError())
 
 proc getDSock(ftp: PFTPClient): TSocket =
   if ftp.isAsync: return ftp.asyncDSock else: return ftp.dsock
@@ -213,6 +214,7 @@ proc pasv(ftp: PFTPClient) =
   ## Negotiate a data connection.
   if not ftp.isAsync:
     ftp.dsock = socket()
+    if ftp.dsock == InvalidSocket: osError(osLastError())
   else:
     ftp.asyncDSock = AsyncSocket()
     ftp.asyncDSock.handleRead =
diff --git a/lib/pure/httpclient.nim b/lib/pure/httpclient.nim
index 2a145eb89..1a0d8c5e1 100644
--- a/lib/pure/httpclient.nim
+++ b/lib/pure/httpclient.nim
@@ -288,6 +288,7 @@ proc request*(url: string, httpMethod = httpGET, extraHeaders = "",
   add(headers, "\c\L")
   
   var s = socket()
+  if s == InvalidSocket: osError(osLastError())
   var port = sockets.TPort(80)
   if r.scheme == "https":
     when defined(ssl):
diff --git a/lib/pure/irc.nim b/lib/pure/irc.nim
index 83fb231f6..31a673210 100644
--- a/lib/pure/irc.nim
+++ b/lib/pure/irc.nim
@@ -249,6 +249,7 @@ proc reconnect*(irc: PIRC, timeout = 5000) =
   if secSinceReconnect < timeout:
     sleep(timeout - secSinceReconnect)
   irc.sock = socket()
+  if irc.sock == InvalidSocket: osError(osLastError())
   irc.connect()
   irc.lastReconnect = epochTime()
 
@@ -274,6 +275,7 @@ proc irc*(address: string, port: TPort = 6667.TPort,
   result.messageBuffer = @[]
   result.status = SockIdle
   result.sock = socket()
+  if result.sock == InvalidSocket: osError(osLastError())
 
 proc processLine(irc: PIRC, line: string): TIRCEvent =
   if line.len == 0:
diff --git a/lib/pure/scgi.nim b/lib/pure/scgi.nim
index 04b77fafe..a6a0faabc 100644
--- a/lib/pure/scgi.nim
+++ b/lib/pure/scgi.nim
@@ -102,6 +102,7 @@ proc open*(s: var TScgiState, port = TPort(4000), address = "127.0.0.1",
   s.input = newString(s.buflen) # will be reused
   
   s.server = socket()
+  if s.server == InvalidSocket: osError(osLastError())
   new(s.client) # Initialise s.client for `next`
   if s.server == InvalidSocket: scgiError("could not open socket")
   #s.server.connect(connectionName, port)
diff --git a/lib/pure/selectors.nim b/lib/pure/selectors.nim
index a4a7b5afd..6b5381c36 100644
--- a/lib/pure/selectors.nim
+++ b/lib/pure/selectors.nim
@@ -238,6 +238,7 @@ when isMainModule:
       sock: TSocket
   
   var sock = socket()
+  if sock == InvalidSocket: osError(osLastError())
   #sock.setBlocking(false)
   sock.connect("irc.freenode.net", TPort(6667))
   
diff --git a/tests/stdlib/tsockets.nim b/tests/stdlib/tsockets.nim
index 6078504f5..2b282c80d 100644
--- a/tests/stdlib/tsockets.nim
+++ b/tests/stdlib/tsockets.nim
@@ -1,6 +1,7 @@
 import sockets
 var s: TSocket
 s = socket()
+if s == InvalidSocket: osError(osLastError())
 
 s.connect("www.google.com", TPort(80))