Commit1f6fdd1cRecorded25 Feb 2026Repositorysigil-socket

Add procedure specs to sqlite and socket modules

Message

sigil-sqlite: 20 specs (16 native, 4 Scheme high-level API) sigil-socket: 30 specs (23 native, 7 Scheme utilities)

Changed
 src/sigil/socket.sgl | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)
Diff
src/sigil/socket.sglmodified
@@ -98,6 +98,7 @@
98
;;; (socket? "not a socket") ; => #f
99
;;; ```
100
(%set-docstring! socket?)
+101
(%set-spec! socket? '(any? -> boolean?))
102
103
;;; Connect to a TCP server.
104
;;;
@@ -107,6 +108,7 @@
108
;;; (tcp-connect "example.com" 80) ; => #<socket>
109
;;; ```
110
(%set-docstring! tcp-connect)
+111
(%set-spec! tcp-connect '(string? integer? -> (maybe socket?)))
112
113
;;; Create a listening TCP server socket.
114
;;;
@@ -116,6 +118,7 @@
118
;;; (tcp-listen 8080) ; => #<socket>
119
;;; ```
120
(%set-docstring! tcp-listen)
+121
(%set-spec! tcp-listen '(integer? -> (maybe socket?)))
122
123
;;; Accept an incoming connection on a listening socket.
124
;;;
@@ -127,6 +130,7 @@
130
;;; (socket-write-line client "Hello!"))
131
;;; ```
132
(%set-docstring! tcp-accept)
+133
(%set-spec! tcp-accept '(socket? -> (maybe socket?)))
134
135
;;; Create a UDP socket.
136
;;;
@@ -134,6 +138,7 @@
138
;;; (udp-socket) ; => #<socket>
139
;;; ```
140
(%set-docstring! udp-socket)
+141
(%set-spec! udp-socket '(-> (maybe socket?)))
142
143
;;; Bind a UDP socket to a local port.
144
;;;
@@ -141,6 +146,7 @@
146
;;; (udp-bind sock 5000)
147
;;; ```
148
(%set-docstring! udp-bind)
+149
(%set-spec! udp-bind '(socket? integer? -> boolean?))
150
151
;;; Send data via UDP to a host and port.
152
;;;
@@ -148,11 +154,13 @@
154
;;; (udp-send sock "127.0.0.1" 5000 "Hello")
155
;;; ```
156
(%set-docstring! udp-send)
+157
(%set-spec! udp-send '(socket? string? integer? string? -> boolean?))
158
159
;;; Receive data from a UDP socket.
160
;;;
161
;;; Returns a list `(data host port)` or `#f` on error.
162
(%set-docstring! udp-receive)
+163
(%set-spec! udp-receive '(socket? -> (maybe list?)))
164
165
;;; Close a socket.
166
;;;
@@ -160,6 +168,7 @@
168
;;; (socket-close sock)
169
;;; ```
170
(%set-docstring! socket-close)
+171
(%set-spec! socket-close '(socket? -> void?))
172
173
;;; Check if a socket has been closed.
174
;;;
@@ -167,23 +176,28 @@
176
;;; (socket-closed? sock) ; => #t or #f
177
;;; ```
178
(%set-docstring! socket-closed?)
+179
(%set-spec! socket-closed? '(socket? -> boolean?))
180
181
;;; Read data from a socket.
182
;;;
183
;;; Returns a string, empty string (no data in non-blocking mode),
184
;;; or eof-object when connection is closed.
185
(%set-docstring! socket-read)
+186
(%set-spec! socket-read '(socket? -> any?))
187
188
;;; Read a line from a socket (up to newline).
189
(%set-docstring! socket-read-line)
+190
(%set-spec! socket-read-line '(socket? -> any?))
191
192
;;; Write data to a socket.
193
;;;
194
;;; Returns the number of bytes written, or `#f` on error.
195
(%set-docstring! socket-write)
+196
(%set-spec! socket-write '(socket? string? -> (maybe integer?)))
197
198
;;; Write a line to a socket (appends newline).
199
(%set-docstring! socket-write-line)
+200
(%set-spec! socket-write-line '(socket? string? -> (maybe integer?)))
201
202
;;; Set a socket to non-blocking mode.
203
;;;
@@ -191,19 +205,23 @@
205
;;; (socket-set-non-blocking! sock #t)
206
;;; ```
207
(%set-docstring! socket-set-non-blocking!)
+208
(%set-spec! socket-set-non-blocking! '(socket? boolean? -> void?))
209
210
;;; Check if a socket is in non-blocking mode.
211
(%set-docstring! socket-non-blocking?)
+212
(%set-spec! socket-non-blocking? '(socket? -> boolean?))
213
214
;;; Check if a socket has data ready to read.
215
;;;
216
;;; Returns `#t` if data is available without blocking.
217
(%set-docstring! socket-ready?)
+218
(%set-spec! socket-ready? '(socket? -> boolean?))
219
220
;;; Wait for activity on multiple sockets.
221
;;;
222
;;; Returns a list of sockets that are ready.
223
(%set-docstring! socket-select)
+224
(%set-spec! socket-select '(list? list? number? -> list?))
225
226
;;; Disable Nagle's algorithm for lower latency.
227
;;;
@@ -211,6 +229,7 @@
229
;;; (socket-set-tcp-nodelay! sock #t)
230
;;; ```
231
(%set-docstring! socket-set-tcp-nodelay!)
+232
(%set-spec! socket-set-tcp-nodelay! '(socket? boolean? -> void?))
233
234
;;; Get the local hostname.
235
;;;
@@ -218,6 +237,7 @@
237
;;; (gethostname) ; => "my-computer"
238
;;; ```
239
(%set-docstring! gethostname)
+240
(%set-spec! gethostname '(-> string?))
241
242
;;; Resolve a hostname to an IP address.
243
;;;
@@ -225,16 +245,19 @@
245
;;; (resolve-hostname "localhost") ; => "127.0.0.1"
246
;;; ```
247
(%set-docstring! resolve-hostname)
+248
(%set-spec! resolve-hostname '(string? -> (maybe string?)))
249
250
;;; Get the local address and port of a socket.
251
;;;
252
;;; Returns `(host . port)`.
253
(%set-docstring! socket-local-address)
+254
(%set-spec! socket-local-address '(socket? -> pair?))
255
256
;;; Get the remote address and port of a connected socket.
257
;;;
258
;;; Returns `(host . port)`.
259
(%set-docstring! socket-remote-address)
+260
(%set-spec! socket-remote-address '(socket? -> pair?))
261
262
;;; Connect to a Unix domain socket.
263
;;;
@@ -245,6 +268,7 @@
268
;;; (unix-connect "/var/run/docker.sock") ; => #<socket>
269
;;; ```
270
(%set-docstring! unix-connect)
+271
(%set-spec! unix-connect '(string? -> (maybe socket?)))
272
273
;; ========== Higher-Level Utilities ==========
274
@@ -259,6 +283,7 @@
283
;;; (socket-read-all sock)))
284
;;; ```
285
(define (call-with-tcp-connection host port proc)
+286
(: string? integer? procedure? -> any?)
287
(let ((sock (tcp-connect host port)))
288
(if sock
289
(let ((result (proc sock)))
@@ -279,6 +304,7 @@
304
;;; (socket-close client))))
305
;;; ```
306
(define (call-with-tcp-server port proc)
+307
(: integer? procedure? -> any?)
308
(let ((server (tcp-listen port)))
309
(if server
310
(let ((result (proc server)))
@@ -294,6 +320,7 @@
320
;;; (socket-send-all sock "Hello, world!") ; => #t
321
;;; ```
322
(define (socket-send-all sock data)
+323
(: socket? (any-of string? bytevector?) -> boolean?)
324
(let ((len (if (string? data)
325
(string-length data)
326
(bytevector-length data))))
@@ -316,6 +343,7 @@
343
;;; (socket-read-all sock) ; => "HTTP/1.0 200 OK\r\n..."
344
;;; ```
345
(define (socket-read-all sock)
+346
(: socket? -> (maybe string?))
347
(let loop ((chunks '()))
348
(let ((chunk (socket-read sock)))
349
(cond
@@ -343,6 +371,7 @@
371
;;; (read-line) ; => "world"
372
;;; ```
373
(define (make-line-reader sock)
+374
(: socket? -> procedure?)
375
(let ((buffer ""))
376
(define (newline? c) (char=? c #\newline))
377
(define (read-next)