X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=basis%2Fwindows%2Fwinsock%2Fwinsock.factor;h=f0503114e378e6322efbc2e92cd9b502686c7241;hp=163b5f9e9dd9893454f9eb2878737d0c90d49361;hb=10e78dde3637ed0adca1972c76e7f283096cdcdc;hpb=5f8426cfbedd16c433a5b559468c645e79726ad4 diff --git a/basis/windows/winsock/winsock.factor b/basis/windows/winsock/winsock.factor index 163b5f9e9d..f0503114e3 100644 --- a/basis/windows/winsock/winsock.factor +++ b/basis/windows/winsock/winsock.factor @@ -1,11 +1,9 @@ ! Copyright (C) 2006 Mackenzie Straight, Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien alien.c-types alien.data alien.strings -alien.syntax arrays byte-arrays classes.struct grouping init -io.encodings.utf16n kernel literals math math.bitwise +USING: accessors alien alien.c-types alien.data alien.syntax +byte-arrays classes.struct grouping init kernel literals math math.parser sequences system vocabs.parser windows.com.syntax windows.errors windows.kernel32 windows.types ; -FROM: alien.c-types => short ; IN: windows.winsock << @@ -75,23 +73,66 @@ CONSTANT: PF_LOCAL 1 CONSTANT: PF_INET 2 CONSTANT: PF_INET6 23 -CONSTANT: AI_PASSIVE 1 -CONSTANT: AI_CANONNAME 2 -CONSTANT: AI_NUMERICHOST 4 +CONSTANT: AI_PASSIVE 0x0001 +CONSTANT: AI_CANONNAME 0x0002 +CONSTANT: AI_NUMERICHOST 0x0004 +CONSTANT: AI_ALL 0x0100 +CONSTANT: AI_ADDRCONFIG 0x0400 CONSTANT: AI_MASK flags{ AI_PASSIVE AI_CANONNAME AI_NUMERICHOST } CONSTANT: NI_NUMERICHOST 1 CONSTANT: NI_NUMERICSERV 2 -CONSTANT: IPPROTO_TCP 6 -CONSTANT: IPPROTO_UDP 17 -CONSTANT: IPPROTO_RM 113 +CONSTANT: IPPROTO_IP 0 ! Dummy protocol for TCP. +CONSTANT: IPPROTO_ICMP 1 ! Internet Control Message Protocol. +CONSTANT: IPPROTO_IGMP 2 ! Internet Group Management Protocol. */ +CONSTANT: IPPROTO_IPIP 4 ! IPIP tunnels (older KA9Q tunnels use 94). +CONSTANT: IPPROTO_TCP 6 ! Transmission Control Protocol. +CONSTANT: IPPROTO_EGP 8 ! Exterior Gateway Protocol. +CONSTANT: IPPROTO_PUP 12 ! PUP protocol. +CONSTANT: IPPROTO_UDP 17 ! User Datagram Protocol. +CONSTANT: IPPROTO_IDP 22 ! XNS IDP protocol. +CONSTANT: IPPROTO_TP 29 ! SO Transport Protocol Class 4. +CONSTANT: IPPROTO_DCCP 33 ! Datagram Congestion Control Protocol. +CONSTANT: IPPROTO_IPV6 41 ! IPv6 header. +CONSTANT: IPPROTO_RSVP 46 ! Reservation Protocol. +CONSTANT: IPPROTO_GRE 47 ! General Routing Encapsulation. +CONSTANT: IPPROTO_ESP 50 ! encapsulating security payload. +CONSTANT: IPPROTO_AH 51 ! authentication header. +CONSTANT: IPPROTO_MTP 92 ! Multicast Transport Protocol. +CONSTANT: IPPROTO_BEETPH 94 ! IP option pseudo header for BEET. +CONSTANT: IPPROTO_ENCAP 98 ! Encapsulation Header. +CONSTANT: IPPROTO_PIM 103 ! Protocol Independent Multicast. +CONSTANT: IPPROTO_COMP 108 ! Compression Header Protocol. +CONSTANT: IPPROTO_RM 113 ! Reliable Multicast aka PGM +CONSTANT: IPPROTO_SCTP 132 ! Stream Control Transmission Protocol. +CONSTANT: IPPROTO_UDPLITE 136 ! UDP-Lite protocol. +CONSTANT: IPPROTO_MPLS 137 ! MPLS in IP. +CONSTANT: IPPROTO_RAW 255 ! Raw IP packets. CONSTANT: FIOASYNC 0x8004667d CONSTANT: FIONBIO 0x8004667e CONSTANT: FIONREAD 0x4004667f +CONSTANT: IP_OPTIONS 1 +CONSTANT: IP_HDRINCL 2 +CONSTANT: IP_TOS 3 +CONSTANT: IP_TTL 4 +CONSTANT: IP_MULTICAST_IF 9 +CONSTANT: IP_MULTICAST_TTL 10 +CONSTANT: IP_MULTICAST_LOOP 11 +CONSTANT: IP_ADD_MEMBERSHIP 12 +CONSTANT: IP_DROP_MEMBERSHIP 13 +CONSTANT: IP_DONTFRAGMENT 14 +CONSTANT: IP_ADD_SOURCE_MEMBERSHIP 15 +CONSTANT: IP_DROP_SOURCE_MEMBERSHIP 16 +CONSTANT: IP_BLOCK_SOURCE 17 +CONSTANT: IP_UNBLOCK_SOURCE 18 +CONSTANT: IP_PKTINFO 19 +CONSTANT: IP_RECEIVE_BROADCAST 22 + + CONSTANT: WSA_FLAG_OVERLAPPED 1 ALIAS: WSA_WAIT_EVENT_0 WAIT_OBJECT_0 ALIAS: WSA_MAXIMUM_WAIT_EVENTS MAXIMUM_WAIT_OBJECTS @@ -157,10 +198,10 @@ STRUCT: timeval GENERIC: sockaddr>ip ( sockaddr -- string ) -M: sockaddr-in sockaddr>ip ( sockaddr -- string ) +M: sockaddr-in sockaddr>ip addr>> uint [ number>string ] { } map-as "." join ; -M: sockaddr-in6 sockaddr>ip ( uchar-array -- string ) +M: sockaddr-in6 sockaddr>ip addr>> [ >hex ] { } map-as 2 group [ concat ] map ":" join ; STRUCT: fd_set @@ -436,7 +477,7 @@ ERROR: winsock-exception n string ; ${ ERROR_IO_PENDING ERROR_SUCCESS WSA_IO_PENDING } member? ; : (maybe-winsock-exception) ( n -- winsock-exception/f ) - ! #! WSAStartup returns the error code 'n' directly + ! ! WSAStartup returns the error code 'n' directly dup winsock-expected-error? [ drop f ] [ [ ] [ n>win32-error-string ] bi \ winsock-exception boa ] if ; @@ -446,17 +487,17 @@ ERROR: winsock-exception n string ; : winsock-error ( -- ) maybe-winsock-exception [ throw ] when* ; -: (throw-winsock-error) ( n -- * ) +: (winsock-error) ( n -- * ) [ ] [ n>win32-error-string ] bi winsock-exception ; : throw-winsock-error ( -- * ) - WSAGetLastError (throw-winsock-error) ; + WSAGetLastError (winsock-error) ; : winsock-error=0/f ( n/f -- ) - { 0 f } member? [ throw-winsock-error ] when ; + { 0 f } member? [ winsock-error ] when ; : winsock-error!=0/f ( n/f -- ) - { 0 f } member? [ throw-winsock-error ] unless ; + { 0 f } member? [ winsock-error ] unless ; ! WSAStartup and WSACleanup return the error code directly : winsock-return-check ( n/f -- ) @@ -484,5 +525,5 @@ ERROR: winsock-exception n string ; : shutdown-winsock ( -- ) WSACleanup winsock-return-check ; -[ init-winsock ] "windows.winsock" add-startup-hook -[ shutdown-winsock ] "windows.winsock" add-shutdown-hook +STARTUP-HOOK: init-winsock +SHUTDOWN-HOOK: shutdown-winsock