changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/lib/net/util.lisp

changeset 698: 96958d3eb5b0
parent: 7c1383c08493
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
279
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 (in-package :net/util)
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 
280
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
3
 (defvar *localhost* #(127 0 0 1))
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
4
 
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
5
 ;; from usocket
279
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
6
 (defun get-address-by-name (name)
357
7c1383c08493 port xsubseq, proc-parse. work on http and clap
Richard Westhaver <ellis@rwest.io>
parents: 280
diff changeset
7
   "Return the address of a host by NAME."
279
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
8
   (multiple-value-bind (host4 host6)
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
9
       (get-host-by-name name)
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
10
     (let ((addr4 (when host4
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
11
                    (car (sb-bsd-sockets::host-ent-addresses host4))))
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
12
           (addr6 (when host6
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
13
                    (car (sb-bsd-sockets::host-ent-addresses host6)))))
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
14
       (values addr4 addr6))))
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
15
 
280
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
16
 ;; from https://github.com/eudoxia0/find-port
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
17
 (defun port-open-p (port &key (host *localhost*))
357
7c1383c08493 port xsubseq, proc-parse. work on http and clap
Richard Westhaver <ellis@rwest.io>
parents: 280
diff changeset
18
   "Determine if a PORT is open on the given HOST."
280
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
19
   (handler-case
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
20
       (let ((socket (make-instance 'inet-socket :type :stream)))
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
21
         (setf (sockopt-reuse-address socket) t)
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
22
         (socket-bind socket host port)
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
23
         (socket-close socket))
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
24
     (address-in-use-error (condition)
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
25
       (declare (ignore condition))
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
26
       nil)))
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
27
 
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
28
 (defun find-port (&key (min 32000) (max 48000) (host *localhost*))
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
29
   "Return the first available port in a range of port numbers."
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
30
   (loop :for port :from min :to max :when (port-open-p port :host host) :return port))
d398c7d4433d cleanup
Richard Westhaver <ellis@rwest.io>
parents: 279
diff changeset
31
 
279
efc3e9ec02bf random tune-ups, added mpd and net/util.lisp
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
32
 ;; (get-address-by-name "localhost")