]> gitweb.factorcode.org Git - factor.git/commitdiff
win32 client sockets
authorMackenzie Straight <eizneckam@gmail.com>
Wed, 31 Aug 2005 22:42:52 +0000 (22:42 +0000)
committerMackenzie Straight <eizneckam@gmail.com>
Wed, 31 Aug 2005 22:42:52 +0000 (22:42 +0000)
library/win32/win32-server.factor
library/win32/winsock.factor

index 0feafa3d82a13b94f02db9c2f667763614dd7a2c..c1fb8b9f1493298913b59c9c6cc3d34eec45e171 100644 (file)
@@ -42,7 +42,7 @@ SYMBOL: socket
     WSAGetLastError [
       ERROR_IO_PENDING ERROR_SUCCESS
     ] member? [
-      win32-error-message throw 
+      WSAGetLastError win32-error-message throw 
     ] unless ;
 
 : new-socket ( -- socket )
@@ -97,6 +97,12 @@ M: win32-server expire ( -- )
         timeout get [ millis cutoff get > [ socket get CancelIo ] when ] when
     ] bind ;
 
+: client-sockaddr ( host port -- sockaddr )
+    setup-sockaddr [
+        >r gethostbyname handle-socket-error hostent-addr
+        r> set-sockaddr-in-addr
+    ] keep ;
+
 IN: io
 : accept ( server -- client )
     win32-server-this [
@@ -111,3 +117,8 @@ IN: io
         dupd <win32-client-stream> swap buffer-free
     ] bind ;
 
+: <client> ( host port -- stream )
+    maybe-init-winsock client-sockaddr new-socket
+    [ swap "sockaddr-in" c-size connect drop handle-socket-error ] keep 
+    dup add-completion <win32-stream> <line-reader> ;
+
index 0e88609db5863d9b281b772d6b2d6bf510fcc90e..fe2d8a88ee364c2cd2922e46333478d872441231 100644 (file)
@@ -85,3 +85,21 @@ END-STRUCT
 : GetAcceptExSockaddrs ( stack effect is too long to put here -- )
     "void" "mswsock" "GetAcceptExSockaddrs"
     [ "void*" "int" "int" "int" "void*" "void*" "void*" "void*" ] alien-invoke ;
+
+BEGIN-STRUCT: hostent
+    FIELD: char* name
+    FIELD: void* aliases
+    FIELD: short addrtype
+    FIELD: short length
+    FIELD: void* addr-list
+END-STRUCT
+
+: hostent-addr hostent-addr-list *void* *uint ;
+
+: gethostbyname ( name -- hostent )
+    "hostent*" "winsock" "gethostbyname" [ "char*" ] alien-invoke ;
+
+: connect ( socket sockaddr addrlen -- int )
+    "int" "winsock" "connect" [ "void*" "sockaddr-in*" "int" ] 
+    alien-invoke ;
+