Mercurial > core / lisp/lib/net/udp.lisp
changeset 698: |
96958d3eb5b0 |
parent: |
aac665e2f5bf
|
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: |
-rw-r--r-- |
description: |
fixes |
1 ;;; net/udp.lisp --- UDP utilities 8 (defvar *udp-ping-size* 512) 10 (defun udp-ping-server (port &key (count 16)) 11 (let ((s (make-instance 'inet-socket :type :datagram :protocol :udp))) 12 (socket-bind s #(0 0 0 0) port) 13 (loop for i from 0 upto count 14 do (multiple-value-bind (buf len address port) (socket-receive s nil *udp-ping-size*) 15 (format t "(~A) Received ~A bytes from ~A:~A - ~A ~%" 16 i len address port (subseq buf 0 (min 10 len)))) 17 finally (socket-close s)))) 19 (defmacro with-udp-client ((socket-var &key (addr #(0 0 0 0)) (port 0) peer) &body body) 20 `(let ((,socket-var (make-instance 'inet-socket :type :datagram :protocol :udp))) 23 (socket-bind ,socket-var ,addr ,port) 24 ,(when peer `(apply #'socket-connect ,socket-var ,peer)) 26 (socket-close ,socket-var)))) 28 (defmacro with-udp-client-and-server (((socket-class &rest common-initargs) 29 (listen-socket-var &rest listen-address) 30 (client-socket-var &rest client-address) 33 `(let ((,listen-socket-var (make-instance ',socket-class ,@common-initargs)) 34 (,client-socket-var (make-instance ',socket-class ,@common-initargs)) 38 (setf (sockopt-reuse-address ,listen-socket-var) t) 39 (socket-bind ,listen-socket-var ,@listen-address) 40 (socket-listen ,listen-socket-var 5) 41 (socket-connect ,client-socket-var ,@client-address) 42 (setf ,server-socket-var (socket-accept ,listen-socket-var)) 44 (socket-close ,client-socket-var) 45 (socket-close ,listen-socket-var) 46 (when ,server-socket-var 47 (socket-close ,server-socket-var)))))