(udp:udp? <obj>)
; Returns true if <obj> is a UDP object, false otherwise

(udp:addr <udp>)
; Returns the IP address associated with the given UDP object

(udp:port <udp>)
; Returns the port associated with the given UDP object

(udp:closed? <udp>)
; Returns true if the given UDP object is close, false if open

(udp:create [<portnum>])
; Creates a UDP socket bound to port <portnum> on the local machine
; If <portnum> is not specified, an abitrary port is chosen
; Returns a UDP object if successful or false if not

(udp:close <udp>)
; Close the UDP socket
; Returns the UDP object if the close was successful, or false if not

(udp:receive <udp>)
; Receive data from the specified UDP socket
; Blocks until data is waiting
; Returns a list of (the received data as a string, the received-from
; host, and the received-from port), or false if there was an error
; Could deal with returning a different format...

(udp:receive-nonblocking <udp>)
; Receive data from the specified UDP socket
; Does not block if no data is available
; Returns a list of (the received data as a string, the received-from
; host, and the received-from port), or false if there was an error
; or if no data was available

(udp:data-ready? <udp>)
; Returns true if data is available at the specified UDP port, false if not

(udp:send <udp> <host> <portnum> <data>)
; Takes a udp object bound to a port, and sends the data
; to the specified host address and port number
; Returns true if send was successful, false if unsuccessful,
; or the number of bytes sent if less then length of <data>

(udp:send-now <host> <portnum> <data>)
; Send, without binding a local port or returning a UDP object
; Returns true if send was successful, false if unsuccessful,
; or the number of bytes sent if less then length of <data>














