[5d3ffa]: contrib / sb-bsd-sockets / win32-constants.lisp Maximize Restore History

Download this file

win32-constants.lisp    251 lines (206 with data), 10.1 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
;;; -*- Lisp -*-
;;; This isn't really lisp, but it's definitely a source file. we
;;; name it thus to avoid having to mess with the clc lpn translations
;;; first, the headers necessary to find definitions of everything
("winsock2.h")
;;; then the stuff we're looking for
((:integer af-inet "AF_INET" "IP Protocol family")
(:integer af-unspec "AF_UNSPEC" "Unspecified")
(:integer sock-stream "SOCK_STREAM"
"Sequenced, reliable, connection-based byte streams.")
(:integer sock-dgram "SOCK_DGRAM"
"Connectionless, unreliable datagrams of fixed maximum length.")
(:integer sock-raw "SOCK_RAW"
"Raw protocol interface.")
(:integer sock-rdm "SOCK_RDM"
"Reliably-delivered messages.")
(:integer sock-seqpacket "SOCK_SEQPACKET"
"Sequenced, reliable, connection-based, datagrams of fixed maximum length.")
(:integer sol-socket "SOL_SOCKET")
;; some of these may be linux-specific
(:integer so-debug "SO_DEBUG"
"Enable debugging in underlying protocol modules")
(:integer so-reuseaddr "SO_REUSEADDR" "Enable local address reuse")
(:integer so-type "SO_TYPE") ;get only
(:integer so-error "SO_ERROR") ;get only (also clears)
(:integer so-dontroute "SO_DONTROUTE"
"Bypass routing facilities: instead send direct to appropriate network interface for the network portion of the destination address")
(:integer so-broadcast "SO_BROADCAST" "Request permission to send broadcast datagrams")
(:integer so-sndbuf "SO_SNDBUF")
(:integer so-rcvbuf "SO_RCVBUF")
(:integer so-keepalive "SO_KEEPALIVE"
"Send periodic keepalives: if peer does not respond, we get SIGPIPE")
(:integer so-oobinline "SO_OOBINLINE"
"Put out-of-band data into the normal input queue when received")
(:integer so-linger "SO_LINGER"
"For reliable streams, pause a while on closing when unsent messages are queued")
(:integer so-sndlowat "SO_SNDLOWAT")
(:integer so-rcvlowat "SO_RCVLOWAT")
(:integer so-sndtimeo "SO_SNDTIMEO")
(:integer so-rcvtimeo "SO_RCVTIMEO")
(:integer tcp-nodelay "TCP_NODELAY")
(:integer HOST-NOT-FOUND "HOST_NOT_FOUND" "Authoritative Answer Host not found.")
(:integer TRY-AGAIN "TRY_AGAIN" "Non-Authoritative Host not found, or SERVERFAIL.")
(:integer NO-RECOVERY "NO_RECOVERY" "Non recoverable errors, FORMERR, REFUSED, NOTIMP.")
(:integer NO-DATA "NO_DATA" "Valid name, no data record of requested type.")
(:integer NO-ADDRESS "NO_ADDRESS" "No address, look for MX record.")
(:integer msg-oob "MSG_OOB")
(:integer msg-peek "MSG_PEEK")
(:integer msg-dontroute "MSG_DONTROUTE")
;; socket shutdown flags
(:integer SHUT_RD "SD_RECEIVE")
(:integer SHUT_WR "SD_SEND")
(:integer SHUT_RDWR "SD_BOTH")
;; errors
(:integer EADDRINUSE "WSAEADDRINUSE")
(:integer EAGAIN "WSAEWOULDBLOCK")
(:integer EBADF "WSAEBADF")
(:integer ECONNREFUSED "WSAECONNREFUSED")
(:integer ETIMEDOUT "WSAETIMEDOUT")
(:integer EINTR "WSAEINTR")
(:integer EINVAL "WSAEINVAL")
(:integer ENOBUFS "WSAENOBUFS")
(:integer ENOMEM "WSAENOBUFS")
(:integer EOPNOTSUPP "WSAEOPNOTSUPP")
(:integer EPERM "WSAENETDOWN")
(:integer EPROTONOSUPPORT "WSAEPROTONOSUPPORT")
(:integer ESOCKTNOSUPPORT "WSAESOCKTNOSUPPORT")
(:integer ENETUNREACH "WSAENETUNREACH")
(:integer ENOTCONN "WSAENOTCONN")
(:integer inaddr-any "INADDR_ANY")
(:integer FIONBIO "FIONBIO")
;; for socket-receive
(:type socklen-t "int")
(:type size-t "size_t")
(:type ssize-t "ssize_t")
(:structure in-addr ("struct in_addr"
((array (unsigned 8)) addr "u_int32_t" "s_addr")))
(:structure sockaddr-in ("struct sockaddr_in"
(integer family "sa_family_t" "sin_family")
;; These two could be in-port-t and
;; in-addr-t, but then we'd throw away the
;; convenience (and byte-order agnosticism)
;; of the old sb-grovel scheme.
((array (unsigned 8)) port "u_int16_t" "sin_port")
((array (unsigned 8)) addr "struct in_addr" "sin_addr")))
(:structure hostent ("struct hostent"
(c-string-pointer name "char *" "h_name")
((* c-string) aliases "char **" "h_aliases")
(integer type "int" "h_addrtype")
(integer length "int" "h_length")
((* (* (unsigned 8))) addresses "char **" "h_addr_list")))
(:structure protoent ("struct protoent"
(c-string-pointer name "char *" "p_name")
((* (* t)) aliases "char **" "p_aliases")
(integer proto "int" "p_proto")))
(:function getprotobyname ("getprotobyname" (* protoent)
(name c-string)))
(:function getprotobynumber ("getprotobynumber" (* protoent)
(proto int)))
;; FIXME: We should probably grovel the windows SOCKET type and use it in
;; these instead of int...
;; KLUDGE: For historical reasons many of these prepend win32- to the symbol
;; names. Life for Windows users of SBCL is already hard enough, so rather
;; than break compatibility for those who directly use these, win32-sockets.lisp
;; wraps them with prefixless wrappers.
(:function win32-bind
("bind" int
(sockfd int)
(my-addr (* t)) ; KLUDGE: sockaddr-in or sockaddr-un?
(addrlen socklen-t)))
(:function win32-listen ("listen" int
(socket int)
(backlog int)))
(:function win32-accept ("accept" int
(socket int)
(my-addr (* t)) ; KLUDGE: sockaddr-in or sockaddr-un?
(addrlen int :in-out)))
(:function win32-getpeername ("getpeername" int
(socket int)
(her-addr (* t)) ; KLUDGE: sockaddr-in or sockaddr-un?
(addrlen socklen-t :in-out)))
(:function win32-getsockname ("getsockname" int
(socket int)
(my-addr (* t)) ; KLUDGE: sockaddr-in or sockaddr-un?
(addrlen socklen-t :in-out)))
(:function win32-connect ("connect" int
(socket int)
(his-addr (* t)) ; KLUDGE: sockaddr-in or sockaddr-un?
(addrlen socklen-t)))
(:function win32-close ("closesocket" int
(fd int)))
(:function shutdown ("shutdown" int
(socket int) ; KLUDGE: should be SOCKET, not int.
(how int)))
(:function win32-recvfrom ("recvfrom" ssize-t
(socket int)
(buf (* t))
(len integer)
(flags int)
(sockaddr (* t)) ; KLUDGE: sockaddr-in or sockaddr-un?
(socklen (* socklen-t))))
(:function win32-recv ("recv" int
(socket int)
(buf (* t))
(len integer)
(flags integer)))
(:function win32-send ("send" ssize-t
(socket int)
(buf (* t))
(len size-t)
(flags int)))
(:function win32-sendto ("sendto" int
(socket int)
(buf (* t))
(len size-t)
(flags int)
(sockaddr (* t)) ; KLUDGE: sockaddr-in or sockaddr-un?
(socklen socklen-t)))
(:function gethostbyname ("gethostbyname" (* hostent) (name c-string)))
(:function gethostbyaddr ("gethostbyaddr" (* hostent)
(addr (* t))
(len int)
(af int)))
;;; should be using getaddrinfo instead?
(:function win32-setsockopt ("setsockopt" int
(socket int)
(level int)
(optname int)
(optval (* t))
(optlen int))) ;;; should be socklen-t!
(:function win32-getsockopt ("getsockopt" int
(socket int)
(level int)
(optname int)
(optval (* t))
(optlen int :in-out))) ;;; should be socklen-t!
(:function win32-ioctl ("ioctlsocket" int
(socket int)
(cmd int)
(argp (unsigned 32) :in-out)))
;;; Win32 specific cruft
(:function wsa-socket ("WSASocketA" int
(af int)
(type int)
(protocol int)
(lpProtocolInfo (* t))
(g int)
(flags int)))
(:function fd->handle ("_get_osfhandle" int
(fd int)))
(:function handle->fd ("_open_osfhandle" int
(osfhandle int)
(flags int)))
(:structure wsa-data ("struct WSAData"
(integer version "u_int16_t" "wVersion")
(integer high-version "u_int16_t" "wHighVersion")
(c-string description "char" "szDescription")
(c-string system-status "char" "szSystemStatus")
(integer max-sockets "unsigned short" "iMaxSockets")
(integer max-udp-dg "unsigned short" "iMaxUdpDg")
(c-string-pointer vendor-info "char *" "lpVendorInfo")))
(:function wsa-startup ("WSAStartup" int
(wVersionRequested (unsigned 16))
(lpWSAData wsa-data :out)))
(:function wsa-get-last-error ("WSAGetLastError" int))
)