summary refs log tree commit diff stats
path: root/lib/pure/sockets2.nim
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.com>2014-03-09 16:05:29 +0200
committerZahary Karadjov <zahary@gmail.com>2014-03-09 16:05:29 +0200
commit1793a0b5cefda62d49d584bd12cc1fc6a40f1438 (patch)
treef740b7b4cd8b15ec2681511223695e79de1bb7f8 /lib/pure/sockets2.nim
parent5aa486cf1172f7e34fa111a1c59c2add5e31bb35 (diff)
parenta0975269564f2474953d2b12aaaab4ba71cec664 (diff)
downloadNim-1793a0b5cefda62d49d584bd12cc1fc6a40f1438.tar.gz
Merge branch 'devel' of github.com:Araq/Nimrod into devel
Diffstat (limited to 'lib/pure/sockets2.nim')
-rw-r--r--lib/pure/sockets2.nim22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/pure/sockets2.nim b/lib/pure/sockets2.nim
index 3542a0694..290f414b4 100644
--- a/lib/pure/sockets2.nim
+++ b/lib/pure/sockets2.nim
@@ -24,6 +24,10 @@ else:
 export TSocketHandle, TSockaddr_in, TAddrinfo, INADDR_ANY, TSockAddr, TSockLen,
   inet_ntoa, recv, `==`, connect, send, accept
 
+export
+  SO_ERROR,
+  SOL_SOCKET
+
 type
   
   TPort* = distinct uint16  ## port type
@@ -208,6 +212,24 @@ proc htons*(x: int16): int16 =
   ## order, this is a no-op; otherwise, it performs a 2-byte swap operation.
   result = sockets2.ntohs(x)
 
+proc getSockOptInt*(socket: TSocketHandle, level, optname: int): int {.
+  tags: [FReadIO].} = 
+  ## getsockopt for integer options.
+  var res: cint
+  var size = sizeof(res).TSocklen
+  if getsockopt(socket, cint(level), cint(optname), 
+                addr(res), addr(size)) < 0'i32:
+    osError(osLastError())
+  result = int(res)
+
+proc setSockOptInt*(socket: TSocketHandle, level, optname, optval: int) {.
+  tags: [FWriteIO].} =
+  ## setsockopt for integer options.
+  var value = cint(optval)
+  if setsockopt(socket, cint(level), cint(optname), addr(value),  
+                sizeof(value).TSocklen) < 0'i32:
+    osError(osLastError())
+
 when defined(Windows):
   var wsa: TWSADATA
   if WSAStartup(0x0101'i16, addr wsa) != 0: OSError(OSLastError())