An interface to User Datagram Protocol sockets.
(require 'udp) (begin (define s (udp-open-socket)) (udp-bind! s #f 0) (udp-connect! s "localhost" 13) ; daytime service (udp-send s "\n") (receive (n data from-host from-port) (udp-recvfrom s 64) (print* n " bytes from " from-host ":" from-port ": " data)) (udp-close-socket s)) ;; The following will be printed: ;; 26 bytes from 127.0.0.1:13: Wed Dec 24 11:53:14 2003
Category 5, with several enhancements by Daishi Kato
Copyright (c) 2004, Category 5 All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Returns a new UDP socket object.[procedure] (udp-open-socket*)
Returns a new nonblocking UDP socket object.[procedure] (udp-bind! SOCKET HOST PORT)
Binds a UDP socket to an address and port as specified by HOST and PORT. HOST may be a string consisting of an IP address or hostname, or #f, in which case INADDR_ANY is used. If PORT is 0, a port will be allocated by the system automatically.[procedure] (udp-connect! SOCKET HOST PORT)
Connect a socket. In the case of UDP this does nothing more than associate a peer address with the socket in the kernel for use with later calls to send(2). UDP is a connectionless protocol.[procedure] (udp-send SOCKET STRING)
Send the bytes in STRING through SOCKET to its peer, as specified with a previous call to udp-connect!. If the socket is not connected, the system will return an error.[procedure] (udp-sendto SOCKET HOST PORT STRING)
Send the bytes in STRING through SOCKET to PORT on HOST.[procedure] (udp-recv SOCKET LENGTH)
Receive a packet and store the data in string of size LENGTH. Returns two values: the number of bytes received and the string consisting the message.[procedure] (udp-recvfrom SOCKET LENGTH)
Same as udp-recv except that two additional values are returned: the host string and port number from which the packet was received.[procedure] (udp-close-socket SOCKET)
Close a socket.[procedure] (udp-socket? THING)
Test whether THING is a UDP socket.[procedure] (udp-bound? SOCKET)
Test whether a UDP socket is bound to a local address and port.[procedure] (udp-connected? SOCKET)
Test whether a peer address and port has been associated with a UDP socket with a call to udp-connect!.[procedure] (udp-bound-port SOCKET)
Returns the port to which the socket is bound.[procedure] (udp-set-multicast-interface SOCKET ADDRESS)
Specify the ADDRESS of the interface to send a multicast packet. This procedure might not be needed if there is only one network interface.[procedure] (udp-join-multicast-group SOCKET ADDRESS GROUP [JOIN])
Join a multicast GROUP with the interface of the ADDRESSS which can be #f for INADDR_ANY. If the optional argument JOIN is set and #f, the multicast group is dropped.
- 1.12: Didn't include signal.h on UNIX [felix]
- 1.11: More Win32 support [Daishi Kato]
- 1.10: Multicast support [Daishi Kato]
- 1.9: Win32 socket-header fun
- 1.8: Hopefully succeeded in actually fixing that cygwin problem (which wasn't a cygwin problem after all, but a broken declaration of ##net#recvfrom)
- 1.7: Fixed cygwin problem [thanks to Daishi Kato]
- 1.6: #includes ws2tcpip.h instead of winsock2.h [Thanks to Graham Fawcett]
- 1.5: Small fix (uses srfi-18 unit, now)
- 1.4: udp-bound-port [Contributed by Daishi Kato]
- 1.3: Yet another bugfix for better Windows support by Daishi Kato
- 1.2: Daishi Kato fixed several bugs