Mercurial > core / lisp/lib/net/tcp.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/tcp.lisp --- TCP utilities 8 (defun tcp-server (port) 9 (let ((s (make-instance 'inet-socket :type :stream :protocol :tcp))) 10 (socket-bind s #(0 0 0 0) port) 12 (multiple-value-bind (buf len addr port) (socket-receive s nil 500) 13 (format t "Received ~A bytes from ~A:~A - ~A ~%" 14 len addr port (subseq buf 0 (min 10 len))))))) 16 (defvar *tcp-ping-size* 512) 18 (defun tcp-ping-server (port &key (count 16)) 19 (let ((s (make-instance 'inet-socket :type :stream :protocol :tcp))) 20 (socket-bind s #(0 0 0 0) port) 21 (loop for i from 0 upto count 22 do (multiple-value-bind (buf len address port) (socket-receive s nil *tcp-ping-size*) 23 (format t "(~A) Received ~A bytes from ~A:~A - ~A ~%" 24 i len address port (subseq buf 0 (min 10 len)))) 25 finally (socket-close s)))) 27 (defmacro with-tcp-client ((socket-var &key (addr #(0 0 0 0)) (port 0) peer) &body body) 28 `(let ((,socket-var (make-instance 'inet-socket :type :stream :protocol :tcp))) 31 (socket-bind ,socket-var ,addr ,port) 32 ,(when peer `(apply #'socket-connect ,socket-var ,peer)) 34 (socket-close ,socket-var))))