--- /dev/null
+
+ @title UDP Socket Documentation
+ @author Stephen Dawson-Haggerty
+ @release public
+----------------------------------------------------------------------
+
+ip-stack provides a UDP sockets layer as a basic application transport
+service. The UDP interface is located in
+tos/lib/net/b6lowpan/interfaces/UDP.nc and is simple:
+
+interface UDP {
+
+ /*
+ * bind a local address. to cut down memory requirements and handle the
+ * common case well, you can only bind a port; all local interfaces are
+ * implicitly bound. the port should be passed in host byte-order (is
+ * this confusing?
+ */
+ command error_t bind(uint16_t port);
+
+ /*
+ * send a payload to the socket address indicated
+ * once the call returns, the stack has no claim on the buffer pointed to
+ */
+ command error_t sendto(struct sockaddr_in6 *dest, void *payload,
+ uint16_t len);
+
+ /*
+ * indicate that the stack has finished writing data into the
+ * receive buffer. if error is not SUCCESS, the payload does not
+ * contain valid data and the src pointer should not be used.
+ */
+ event void recvfrom(struct sockaddr_in6 *src, void *payload,
+ uint16_t len, struct ip_metadata *meta);
+
+}
+
+Usage
+----------------------------------------------------------------------
+
+Each socket must be allocated using the generic component UdpSocketC.
+
+For clients, no initialization is necessary; they may send to a
+destination without calling bind. The stack will allocate a unique
+ephemeral port number and send out the datagram.
+
+Servers wishing to provide a service using a well-known port should
+call bind() on that port number before generating datagrams.
+
+Example
+----------------------------------------------------------------------
+
+The simplest server is an echo service running on port 7.
+
+Because of the buffer semantics, it is safe to call send directly from
+a receive event handler.
+
+ event void Boot.booted() {
+ call Echo.bind(7);
+ }
+
+ event void Echo.recvfrom(struct sockaddr_in6 *from, void *data,
+ uint16_t len, struct ip_metadata *meta) {
+ call Echo.sendto(from, data, len);
+ }
+
+The wiring is as follows.
+
+ components new UdpSocketC();
+ UDPEchoP.Echo -> UdpSocketC;