Author: ehuelsmann
Date: Wed Mar 19 17:47:05 2008
New Revision: 323
Modified:
usocket/trunk/backend/clisp.lisp
usocket/trunk/usocket.lisp
Log:
Datagram (udp) socket creation interface. [Use socket-close to close the socket.
Modified: usocket/trunk/backend/clisp.lisp
==============================================================================
--- usocket/trunk/backend/clisp.lisp (original)
+++ usocket/trunk/backend/clisp.lisp Wed Mar 19 17:47:05 2008
@@ -162,6 +162,22 @@
(ip-to-octet-buffer sockaddr_in ip :start 2)
sockaddr_in)
+ (defun socket-create-datagram (local-port
+ &key (local-host *wildcard-host*)
+ remote-host
+ remote-port)
+ (let ((sock (rawsock:socket :inet :dgram 0))
+ (lsock_addr (fill-sockaddr_in (make-sockaddr_in)
+ local-host local-port))
+ (rsock_addr (when remote-host
+ (fill-sockaddr_in (make-sockaddr_in)
+ remote-host (or remote-port
+ local-port)))))
+ (bind sock lsock_addr)
+ (when rsock_addr
+ (connect sock rsock_addr))
+ (make-datagram-socket sock :connected-p (if rsock_addr t nil))))
+
(defun socket-receive (socket buffer &key (size (length buffer)))
"Returns the buffer, the number of octets copied into the buffer (received)
and the address of the sender as values."
Modified: usocket/trunk/usocket.lisp
==============================================================================
--- usocket/trunk/usocket.lisp (original)
+++ usocket/trunk/usocket.lisp Wed Mar 19 17:47:05 2008
@@ -114,6 +114,13 @@
:socket socket
:element-type element-type))
+(defun make-datagram-socket (socket &key connected-p)
+ (unless socket
+ (error 'invalid-socket-error))
+ (make-instance 'datagram-usocket
+ :socket socket
+ :connected-p connected-p))
+
(defgeneric socket-accept (socket &key element-type)
(:documentation
"Accepts a connection from `socket', returning a `stream-socket'.