diff --git a/ChangeLog b/ChangeLog
index 45713cb170ebc24bc8c6409c6353140e0dacab41..41cdae75740f13eed775ab59cbe3b2b1ef6ce21f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -208,3 +208,5 @@
 	* Added send() and sendto(); integrate write() and close() with socket descriptors.
         * Added recv() and recvfrom().
 	* Added getsockopt() and setsockopt()
+	* Documentation updated to address socket interfaces.
+
diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html
index 1f211934595eee3358938d7738e51737d74c9901..bd511e94078f0c3d9fa131f795ea61157cb02632 100644
--- a/Documentation/NuttX.html
+++ b/Documentation/NuttX.html
@@ -8,7 +8,7 @@
   <tr align="center" bgcolor="#e4e4e4">
     <td>
       <h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
-      <p>Last Updated: July 2, 2007</p>
+      <p>Last Updated: September 8, 2007</p>
     </td>
   </tr>
 </table>
@@ -641,6 +641,7 @@ Other memory:
 	* Added send() and sendto(); integrate write() and close() with socket descriptors.
         * Added recv() and recvfrom().
 	* Added getsockopt() and setsockopt()
+	* Documentation updated to address socket interfaces.
 </pre></ul>
 
 <table width ="100%">
diff --git a/Documentation/NuttxPortingGuide.html b/Documentation/NuttxPortingGuide.html
index 03e76cd079122c07517defabf4e9174914118705..5b83352329a36aa420c59ca76927840f6620074c 100644
--- a/Documentation/NuttxPortingGuide.html
+++ b/Documentation/NuttxPortingGuide.html
@@ -16,7 +16,7 @@
   </b></big>
   <p><small>by</small></p>
   <p>Gregory Nutt</p>
-  <p><small>Last Update: May 26, 2007</small></p>
+  <p><small>Last Update: September 8, 2007</small></p>
 </center>
 
 <center><h1>Table of Contents</h1></center>
@@ -46,9 +46,11 @@
   <li><a href="#DirStructInclude">2.7 include/</a></li>
   <li><a href="#DirStructLib">2.8 lib/</a></li>
   <li><a href="#DirStructMm">2.9 mm/</a></li>
-  <li><a href="#DirStructSched">2.10 sched/</a></li>
-  <li><a href="#DirStructTools">2.11 tools/</a></li>
-  <li><a href="#topmakefile">2.12 Makefile</a></li>
+  <li><a href="#DirStructNet">2.10 net</a></li>
+  <li><a href="#DirStructNetUtils">2.11 netutils</a></li>
+  <li><a href="#DirStructSched">2.12 sched/</a></li>
+  <li><a href="#DirStructTools">2.13 tools/</a></li>
+  <li><a href="#topmakefile">2.14 Makefile</a></li>
 </ul>
 <li><a href="#configandbuild">3.0 Configuring and Building</a></li>
 <ul>
@@ -139,8 +141,8 @@
 |   |   |  `-- <i>(board-specific source files)</i>
 |   |   `-- <i>(board-specific configuration files)</i>
 |   `-- <i>&lt;other-boards&gt;</i>/
-|-- <a href="#DirStructDrivers">drivers</a>
-|   |-- Makefile/
+|-- <a href="#DirStructDrivers">drivers</a>/
+|   |-- Makefile
 |   `-- <i>(common driver source files)</i>
 |-- <a href="#DirStructExamples">examples</a>/
 |   `-- <i>(example)</i>/
@@ -148,9 +150,16 @@
 |       `-- <i>(example source files)</i>
 |-- <a href="#DirStructFs">fs</a>/
 |   |-- Makefile
-|   `-- <i>(fs source files)</i>
+|   `-- <i>(common file system source files)</i>
 |-- <a href="#DirStructInclude">include</a>/
 |   |-- <i>(standard header files)</i>
+|   |-- arpa/
+|   |   `-- <i>(standard header files)</i>
+|   |-- net/
+|   |   `-- uip/
+|   |       `-- <i>(uIP specific header files)</i>
+|   |-- netinet/
+|   |   `-- <i>(standard header files)</i>
 |   |-- nuttx/
 |   |   `-- <i>(nuttx specific header files)</i>
 |   `- sys/
@@ -160,7 +169,29 @@
 |   `-- <i>(lib source files)</i>
 |-- <a href="#DirStructMm">mm</a>/
 |   |-- Makefile
-|   `-- <i>(mm source files)</i>
+|   `-- <i>(memory management source files)</i>
+|-- <a href="#DirStructNet">net</a>/
+|   |-- Makefile
+|   |-- uip/
+|   |   `-- <i>(uip source files)</i>
+|   `-- <i>(socket source files)</i>
+|-- <a href="#DirStructNetUtils">netutils</a>/
+|   |-- dhcp/
+|   |   `-- <i>(dhcp source files)</i>
+|   |-- resolv/
+|   |   `-- <i>(resolv source files)</i>
+|   |-- smtp/
+|   |   `-- <i>(smtp source files)</i>
+|   |-- telnetd/
+|   |   `-- <i>(telnetd source files)</i>
+|   |-- uiplib/
+|   |   `-- <i>(uiplib source files)</i>
+|   |-- weblclient/
+|   |   `-- <i>(webclient source files)</i>
+|   |-- webserver/
+|   |   `-- <i>(webserver source files)</i>
+|   |-- Makefile
+|   `-- <i>(fs source files)</i>
 |-- <a href="#DirStructSched">sched</a>/
 |   |-- Makefile
 |   `-- <i>(sched source files)</i>
@@ -604,18 +635,30 @@
   This is the NuttX memory manager.
 </p>
 
-<h2>2.10 <a name="DirStructSched">sched</a></h2>
+<h2>2.10 <a name="DirStructNet">net</a></h2>
+<p>
+  This directory contains the implementation of the socket APIs.
+  The subdirectory, <code>uip</code> contians the uIP port.
+</P>
+
+<h2>2.11 <a name="DirStructNetUtils">netutils</a></h2>
+<p>
+  This directory contains most of the network applications contained under the uIP-1.0 apps directory.
+  As the uIP apps/README says, these applications "are not all heavily tested."
+</p>
+
+<h2>2.12 <a name="DirStructSched">sched</a></h2>
 <p>
   The files forming core of the NuttX RTOS reside here.
 </p>
 
-<h2>2.11 <a name="DirStructTools">tools</a></h2>
+<h2>2.13 <a name="DirStructTools">tools</a></h2>
 <p>
   This directory holds a collection of tools and scripts to simplify
   configuring and building NuttX.
 </p>
 
-<h2>2.12 <a name="topmakefile">Makefile</a></h2>
+<h2>2.14 <a name="topmakefile">Makefile</a></h2>
 <p>
   The top-level <code>Makefile</code> in the <code>${TOPDIR}</code> directory contains all of the top-level control
   logic to build NuttX.
diff --git a/Documentation/NuttxUserGuide.html b/Documentation/NuttxUserGuide.html
index 7f0b7e5bf09f4622ef9cc1dffac388f35a11bdf6..8ba15218422900143a1258b5b2ef2a8af989f627 100644
--- a/Documentation/NuttxUserGuide.html
+++ b/Documentation/NuttxUserGuide.html
@@ -21,7 +21,7 @@ User's Manual
 <p>
 Gregory Nutt
 <p>
-<small>Last Update: June 30, 2007</small>
+<small>Last Update: September 8, 2007</small>
 </center>
 
 <h1>1.0 <A NAME="Introduction">Introduction</a></h1>
@@ -55,6 +55,7 @@ Gregory Nutt
       <li>Paragraph 2.9 <a href="#Pthread">Pthread Interfaces</a></li>
       <li>Paragraph 2.10 <a href="#Environ">Environment Variables</a></li>
       <li>Paragraph 2.11 <a href="#FileSystem">Filesystem Interfaces</a></li>
+      <li>Paragraph 2.12 <a href="#Network">Network Interfaces</a></li>
     </ul>
   </li>
   <li>
@@ -612,7 +613,7 @@ Compatible with the POSIX interface of the same name.
 <p>
   <b>Returned Values:</b>
   On success, sched_setparam() returns 0 (OK).
-  On error, -1 (ERROR) is returned, and errno is set appropriately.
+  On error, -1 (ERROR) is returned, and<code>errno</code>is set appropriately.
 </p>
 <ul>
 
@@ -713,7 +714,7 @@ interface of the same name.
 <p>
   <b>Returned Values:</b> 
   On success, <i>sched_setscheduler()</i> returns OK (zero).  On
-  error, ERROR (-1) is returned, and errno is set appropriately:
+  error, ERROR (-1) is returned, and<code>errno</code>is set appropriately:
 </p>
 <ul>
   <li>EINVAL The scheduling policy is not one of the
@@ -761,7 +762,7 @@ policy.
   <li>
     On success, <i>sched_getscheduler()</i> returns the policy for
     the task (either SCHED_FIFO or SCHED_RR).
-    On error,  ERROR (-1) is returned, and errno is set appropriately:
+    On error,  ERROR (-1) is returned, and<code>errno</code>is set appropriately:
     <ul>
       <li>ESRCH  The task whose ID is pid could not be found.</li>
     </ul>
@@ -893,7 +894,7 @@ priority of the calling task is returned.
 <p>
   <b>Returned Values:</b> 
   On success, sched_rr_get_interval() returns OK (0).  On
-  error, ERROR (-1) is returned, and errno is set to:
+  error, ERROR (-1) is returned, and<code>errno</code>is set to:
 </p>
 <ul>
   <li>EFAULT Cannot copy to interval</LI>
@@ -2521,7 +2522,7 @@ VxWorks provides the following comparable interface:
   If the call succeeds, <code>timer_create()</code> will return 0 (<code>OK</code>) and update the
   location referenced by <code>timerid</code> to a <code>timer_t</code>, which can be passed to the
   other per-thread timer calls.  If an error occurs, the function will return
-  a value of -1 (<code>ERROR</code>) and set errno to indicate the error.
+  a value of -1 (<code>ERROR</code>) and set<code>errno</code>to indicate the error.
 </p>
 <ul>
   <li><code>EAGAIN</code>. The system lacks sufficient signal queuing resources to honor the
@@ -2569,7 +2570,7 @@ VxWorks provides the following comparable interface:
 </p>
 <p>
   If successful, the <I>timer_delete()</I> function will return zero (<I>OK</I>).
-  Otherwise, the function will return a value of -1 (ERROR) and set errno to indicate the error:
+  Otherwise, the function will return a value of -1 (ERROR) and set<code>errno</code>to indicate the error:
 </p>
 <ul>
   <li><code>EINVAL</code>. The timer specified timerid is not valid.</li>
@@ -2646,7 +2647,7 @@ VxWorks provides the following comparable interface:
 </p>
 <p>
   If the timer_gettime() succeeds, a value of 0 (OK) will be returned.
-  If an error occurs, the value -1 (ERROR) will be returned, and errno set to indicate the error.
+  If an error occurs, the value -1 (ERROR) will be returned, and<code>errno</code>set to indicate the error.
 </p>
 <ul>
   <li><code>EINVAL</code>. The timerid argument does not correspond to an ID returned by timer_create() but not yet deleted by timer_delete().</li>
@@ -3306,7 +3307,7 @@ is delivered more than once.&quot;
 <ul>
 <li>
   On  success (at least one signal was sent), zero (OK) is returned.
-  On error, -1 (ERROR) is returned, and errno is set appropriately.
+  On error, -1 (ERROR) is returned, and<code>errno</code>is set appropriately.
   <ul>
     <li><code>EGAIN</code>. The limit of signals which may be queued has been reached.</li>
     <li><code>EINVAL</code>. signo was invalid.</li>
@@ -5767,6 +5768,501 @@ interface of the same name.
   int    statfs(const char *path, FAR struct statfs *buf); /* Prototyped but not implemented */
 </pre></ul>
 
+<h2>2.12 <a name="Network">Network Interfaces</a></h2>
+<p>NuttX includes a simple interface layer based on uIP (see <a href="http://www.sics.se/~adam/uip/index.php/Main_Page">http://www.sics.se</a>).
+NuttX supports subset of a standard socket interface to uIP.
+These network feature can be enabled by settings in the architecture
+<a href="NuttxPortingGuide.html#apndxconfigs">configuration file</a>.
+Those socket APIs are discussed in the following paragraphs.</p>
+<ul>
+<li>
+</li>
+<li><a href="#socket">2.12.1 socket</a></li>
+<li><a href="#bind">2.12.2 bind</a></li>
+<li><a href="#connect">2.12.3 connect</a></li>
+<li><a href="#send">2.12.4 send</a></li>
+<li><a href="#sendto">2.12.5 sendto</a></li>
+<li><a href="#recv">2.12.6 recv</a></li>
+<li><a href="#recvfrom">2.12.7 recvfrom</a></li>
+<li><a href="#setsockopt">2.12.8 setsockopt</a></li>
+<li><a href="#getsockopt">2.12.9 getsockopt</a></li>
+</ul>
+
+<h3><a name="socket">2.12.1 <code>socket</code></a></h3>
+<p>
+  <b>Function Prototype:</b>
+</p>
+<pre>
+  #include <sys/socket.h>
+  int socket(int domain, int type, int protocol);
+</pre>
+<p>
+  <b>Description:</b>
+   socket() creates an endpoint for communication and returns a descriptor.
+</p>
+<p>
+  <b>Input Parameters:</b>
+</p>
+<p>
+<ul>
+  <li><code>domain</code>: (see sys/socket.h)</li>
+  <li><code>type</code>: (see sys/socket.h)</li>
+  <li><code>protocol</code>: (see sys/socket.h)</li>
+</ul>
+<p>
+  <b>Returned Values:</b>
+  0 on success; -1 on error with<code>errno</code>set appropriately:
+</p>
+<ul>
+  <li><code>EACCES</code>.
+    Permission to create a socket of the specified type and/or protocol is denied.</li>
+  <li><code>EAFNOSUPPORT</code>.
+    The implementation does not support the specified address family.</li>
+  <li><code>EINVAL</code>.
+    Unknown protocol, or protocol family not available.</li>
+  <li><code>EMFILE</code>.
+    Process file table overflow.</li>
+  <li><code>ENFILE</code>
+    The system limit on the total number of open files has been reached.</li>
+  <li><code>ENOBUFS</code> or <code>ENOMEM</code>.
+    Insufficient memory is available. The socket cannot be created until sufficient resources are freed.</li>
+  <li><code>EPROTONOSUPPORT</code>.
+    The protocol type or the specified protocol is not supported within this domain.</li>
+</ul>
+
+<h3><a name="bind">2.12.2 <code>bind</code></a></h3>
+<p>
+  <b>Function Prototype:</b>
+</p>
+<pre>
+  #include <sys/socket.h>
+  int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
+</pre>
+<p>
+  <b>Description:</b>
+   <code>bind()</code> gives the socket sockfd the local address <code>addr</code>.
+   <code>addr</code> is <code>addrlen</code> bytes long. Traditionally, this is called
+   &quot;assigning a name to a socket.&quot; When a socket is created with <code>socket()</code>,
+   it exists in a name space (address family) but has no name assigned.
+<p>
+</p>
+<p>
+  <b>Input Parameters:</b>
+</p>
+<p>
+<ul>
+  <li><code>sockfd</code>: Socket descriptor from socket.</li>
+  <li><code>addr</code>: Socket local address.</li>
+  <li><code>addrlen</code>: Length of <code>addr</code>.</li>
+</ul>
+<p>
+  <b>Returned Values:</b>
+  0 on success; -1 on error with<code>errno</code>set appropriately:
+</p>
+<ul>
+  <li><code>EACCES</code>
+    The address is protected, and the user is not the superuser.</li>
+  <li><code>EADDRINUSE</code>
+    The given address is already in use.</li>
+  <li><code>EBADF</code>
+    <code>sockfd</code> is not a valid descriptor.</li>
+  <li><code>EINVAL</code>
+    The socket is already bound to an address.</li>
+  <li><code>ENOTSOCK</code>
+    <code>sockfd</code> is a descriptor for a file, not a socket.</li>
+</ul>
+
+<h3><a name="connect">2.12.3 <code>connect</code></a></h3>
+<p>
+  <b>Function Prototype:</b>
+</p>
+<pre>
+  #include <sys/socket.h>
+  int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
+</pre>
+<p>
+  <b>Description:</b>
+  <code>connect()</code> connects the socket referred to by the file descriptor
+  <code>sockfd</code> to the address specified by <code>addr</code>.
+  The <code>addrlen</code> argument specifies the size of <code>addr</code>.
+  The format of the address in <code>addr</code> is determined by the address space
+  of the socket sockfd.
+
+  If the socket sockfd is of type SOCK_DGRAM then <code>addr</code> is the address
+  to which datagrams are sent by default, and the only address from which
+  datagrams are received. If the socket is of type SOCK_STREAM or
+  SOCK_SEQPACKET, this call attempts to make a connection to the socket
+  that is bound to the address specified by <code>addr</code>.
+
+  Generally, connection-based protocol sockets may successfully <code>connect()</code>
+  only once; connectionless protocol sockets may use <code>connect()</code> multiple
+  times to change their association.  Connectionless sockets may dissolve
+  the association by connecting to an address with the sa_family member of
+  sockaddr set to AF_UNSPEC.
+<p>
+</p>
+<p>
+  <b>Input Parameters:</b>
+</p>
+<p>
+<ul>
+  <li><code>sockfd</code>: Socket descriptor returned by <code>socket()</code></li>
+  <li><code>addr</code>: Server address (form depends on type of socket)</li>
+  <li><code>addrlen</code>: Length of actual <code>addr</code></li>
+</ul>
+<p>
+  <b>Returned Values:</b>
+  0 on success; -1 on error with<code>errno</code>set appropriately:
+</p>
+  <li><code>EACCES</code> or </code>EPERM</code>:
+    The user tried to connect to a broadcast address without having the
+    socket broadcast flag enabled or the connection request failed
+    because of a local firewall rule.</li>
+  <li><code>EADDRINUSE</code>
+    Local address is already in use.</li>
+  <li><code>EAFNOSUPPORT</code>
+    The passed address didn't have the correct address family in its
+    sa_family field.</li>
+  <li><code>EAGAIN</code>
+    No more free local ports or insufficient entries in the routing
+    cache. For PF_INET.</li>
+  <li><code>EALREADY</code>
+    The socket is non-blocking and a previous connection attempt has
+    not yet been completed.</li>
+  <li><code>EBADF</code>
+    The file descriptor is not a valid index in the descriptor table.</li>
+  <li><code>ECONNREFUSED</code>
+    No one listening on the remote address.</li>
+  <li><code>EFAULT</code>
+    The socket structure address is outside the user's address space.</li>
+  <li><code>EINPROGRESS</code>
+    The socket is non-blocking and the connection cannot be completed
+    immediately.</li>
+  <li><code>EINTR</code>
+    The system call was interrupted by a signal that was caught.</li>
+  <li><code>EISCONN</code>
+    The socket is already connected.</li>
+  <li><code>ENETUNREACH</code>
+    Network is unreachable.</li>
+  <li><code>ENOTSOCK</code>
+    The file descriptor is not associated with a socket.</li>
+  <li><code>ETIMEDOUT</code>
+    Timeout while attempting connection. The server may be too busy
+    to accept new connections.</li>
+</ul>
+
+<h3><a name="send">2.12.4 <code>send</code></a></h3>
+<p>
+  <b>Function Prototype:</b>
+</p>
+<pre>
+  #include <sys/socket.h>
+  ssize_t send(int sockfd, const void *buf, size_t len, int flags);
+</pre>
+<p>
+  <b>Description:</b>
+  The <code>send()</code> call may be used only when the socket is in a connected state
+  (so that the intended recipient is known).
+  The only difference between <code>send()</code> and <code>write()</code> is the
+  presence of <code>flags</code>.
+  With <code>zero</code> flags parameter, <code>send()</code> is equivalent to
+  <code>write()</code>. Also, <code>send(s,buf,len,flags)</code> is
+  equivalent to <code>sendto(s,buf,len,flags,NULL,0)</code>.
+</p>
+<p>
+  <b>Input Parameters:</b>
+</p>
+<ul>
+  <li><code>sockfd</code>: Socket descriptor of socket
+  <li><code>buf</code>: Data to send
+  <li><code>len</code>: Length of data to send
+  <li><code>flags</code>: Send flags
+</ul>
+<p>
+  <b>Returned Values:</b>
+  See <a href="#sendto"><code>sendto()</code></a>.
+</p>
+
+<h3><a name="sendto">2.12.5 <code>sendto</code></a></h3>
+<p>
+  <b>Function Prototype:</b>
+</p>
+<pre>
+  #include <sys/socket.h>
+  ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
+                 const struct sockaddr *to, socklen_t tolen);
+</pre>
+<p>
+  <b>Description:</b>
+  If <code>sendto()</code> is used on a connection-mode (SOCK_STREAM, SOCK_SEQPACKET)
+  socket, the parameters to and tolen are ignored (and the error EISCONN
+  may be returned when they are not NULL and 0), and the error ENOTCONN is
+  returned when the socket was not actually connected.
+<p>
+</p>
+<p>
+  <b>Input Parameters:</b>
+</p>
+<ul>
+  <li><code>sockfd</code>: Socket descriptor of socket
+  <li><code>buf</code>: Data to send
+  <li><code>len</code>: Length of data to send
+  <li><code>flags</code>: Send flags
+  <li><code>to</code>: Address of recipient
+  <li><code>tolen</code>: The length of the address structure
+</ul>
+<p>
+  <b>Returned Values:</b>
+  On success, returns the number of characters sent.  On  error, -1 is returned, and<code>errno</code>is set appropriately:
+</p>
+<ul>
+  <li><code>EAGAIN</code> or <code>EWOULDBLOCK</code>.
+    The socket is marked non-blocking and the requested operation would block.
+  <li><code>EBADF</code>.
+    An invalid descriptor was specified.
+  <li><code>ECONNRESET</code>.
+    Connection reset by peer.
+  <li><code>EDESTADDRREQ</code>.
+    The socket is not connection-mode, and no peer address is set.
+  <li><code>EFAULT</code>.
+    An invalid user space address was specified for a parameter.
+  <li><code>EINTR</code>.
+    A signal occurred before any data was transmitted.
+  <li><code>EINVAL</code>.
+    Invalid argument passed.
+  <li><code>EISCONN</code>.
+    The connection-mode socket was connected already but a recipient
+    was specified. (Now either this error is returned, or the recipient
+    specification is ignored.)
+  <li><code>EMSGSIZE</code>.
+    The socket type requires that message be sent atomically, and the
+    size of the message to be sent made this impossible.
+  <li><code>ENOBUFS</code>.
+    The output queue for a network interface was full. This generally
+    indicates that the interface has stopped sending, but may be
+    caused by transient congestion.
+  <li><code>ENOMEM</code>.
+    No memory available.
+  <li><code>ENOTCONN</code>.
+    The socket is not connected, and no target has been given.
+  <li><code>ENOTSOCK</code>.
+    The argument s is not a socket.
+  <li><code>EOPNOTSUPP</code>.
+    Some bit in the flags argument is inappropriate for the socket type.
+  <li><code>EPIPE</code>.
+    The local end has been shut down on a connection oriented socket.
+    In this case the process will also receive a SIGPIPE unless
+    MSG_NOSIGNAL is set.
+</ul>
+
+<h3><a name="recv">2.12.6 <code>recv</code></a></h3>
+<p>
+  <b>Function Prototype:</b>
+</p>
+<pre>
+  #include <sys/socket.h>
+  ssize_t recv(int sockfd, void *buf, size_t len, int flags);
+</pre>
+<p>
+  <b>Description:</b>
+  The <code>recv()</code> call is identical to
+  <a href="#recvfrom"><code>recvfrom()</code></a> with a NULL
+  <code>from</code> parameter.
+<p>
+</p>
+<p>
+  <b>Input Parameters:</b>
+</p>
+<ul>
+  </li>
+  <li>sockfd</code>: Socket descriptor of socket </li>
+  <li>buf</code>: Buffer to receive data </li>
+  <li>len</code>: Length of buffer </li>
+  <li>flags</code>: Receive flags </li>
+</ul>
+<p>
+  <b>Returned Values:</b>
+  see <a href="#recvfrom"><code>recvfrom()</code></a>.
+  Zero on success.
+</p>
+
+<h3><a name="recvfrom">2.12.7 <code>recvfrom</code></a></h3>
+<p>
+  <b>Function Prototype:</b>
+</p>
+<pre>
+  #include <sys/socket.h>
+  ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
+                   struct sockaddr *from, socklen_t *fromlen);
+</pre>
+<p>
+  <b>Description:</b>
+  <code>recvfrom()</code> receives messages from a socket, and may be used to receive
+  data on a socket whether or not it is connection-oriented.
+</p>
+<p>
+  If <code>from</code> is not NULL, and the underlying protocol provides the source
+  address, this source address is filled in. The argument <code>fromlen</code>
+  initialized to the size of the buffer associated with <code>from</code>, and modified
+  on return to indicate the actual size of the address stored there.
+</p>
+<p>
+  <b>Input Parameters:</b>
+</p>
+<ul>
+    <li><code>sockfd</code>: Socket descriptor of socket.</li>
+    <li><code>buf</code>:  Buffer to receive data.</li>
+    <li><code>len</code>: Length of buffer.</li>
+    <li><code>flags</code>: Receive flags.</li>
+    <li><code>from</code>: Address of source.</li>
+    <li><code>fromlen</code>: The length of the address structure.</li>
+</ul>
+<p>
+  <b>Returned Values:</b>
+  On success, returns the number of characters sent.
+  On error, -1 is returned, and errno is set appropriately:
+</p>
+<ul>
+    <li><code>EAGAIN</code>.
+      The socket is marked non-blocking and the receive operation would block,
+      or a receive timeout had been set and the timeout expired before data
+      was received.
+    <li><code>EBADF</code>.
+      The argument <code>sockfd</code> is an invalid descriptor.
+    <li><code>ECONNREFUSED</code>.
+      A remote host refused to allow the network connection (typically because
+      it is not running the requested service).
+    <li><code>EFAULT</code>.
+      The receive buffer pointer(s) point outside the process's address space.
+    <li><code>EINTR</code>.
+      The receive was interrupted by delivery of a signal before any data were
+      available.
+    <li><code>EINVAL</code>.
+      Invalid argument passed.
+    <li><code>ENOMEM</code>.
+      Could not allocate memory.
+    <li><code>ENOTCONN</code>.
+      The socket is associated with a connection-oriented protocol and has
+      not been connected.
+    <li><code>ENOTSOCK</code>.
+      The argument <code>sockfd</code> does not refer to a socket.
+</ul>
+
+<h3><a name="setsockopt">2.12.8 <code>setsockopt</code></a></h3>
+<p>
+  <b>Function Prototype:</b>
+</p>
+<pre>
+  #include <sys/socket.h>
+  int setsockopt(int sockfd, int level, int option,
+                 const void *value, socklen_t value_len);
+</pre>
+<p>
+  <b>Description:</b>
+  <code>setsockopt()</code> sets the option specified by the <code>option</code> argument,
+  at the protocol level specified by the <code>level</code> argument, to the value
+  pointed to by the <code>value</code> argument for the socket associated with the
+  file descriptor specified by the <code>sockfd</code> argument.
+</p>
+<p>
+  The <code>level</code> argument specifies the protocol level of the option. To set
+  options at the socket level, specify the level argument as SOL_SOCKET.
+</p>
+<p>
+  See <sys/socket.h> a complete list of values for the <code>option</code> argument.
+</p>
+<p>
+  <b>Input Parameters:</b>
+</p>
+<ul>
+  <li><code>sockfd</code>: Socket descriptor of socket
+  <li><code>level</code>: Protocol level to set the option
+  <li><code>option</code>: identifies the option to set
+  <li><code>value</code>: Points to the argument value
+  <li><code>value_len</code>: The length of the argument value
+</ul>
+<p>
+  <b>Returned Values:</b>
+  On success, returns the number of characters sent.
+  On error, -1 is returned, and errno is set appropriately:
+</p>
+<ul>
+  <li><code>BADF</code>.
+     The <code>sockfd</code> argument is not a valid socket descriptor.
+  <li><code>DOM</code>.
+     The send and receive timeout values are too big to fit into the
+     timeout fields in the socket structure.
+  <li><code>INVAL</code>.
+     The specified option is invalid at the specified socket <code>level</code> or the
+     socket has been shut down.
+  <li><code>ISCONN</code>.
+     The socket is already connected, and a specified option cannot be set
+     while the socket is connected.
+  <li><code>NOPROTOOPT</code>.
+     The <code>option</code> is not supported by the protocol.
+  <li><code>NOTSOCK</code>.
+     The <code>sockfd</code> argument does not refer to a socket.
+  <li><code>NOMEM</code>.
+     There was insufficient memory available for the operation to complete.
+  <li><code>NOBUFS</code>.
+     Insufficient resources are available in the system to complete the call.
+</ul>
+
+<h3><a name="getsockopt">2.12.9 <code>getsockopt</code></a></h3>
+<p>
+  <b>Function Prototype:</b>
+</p>
+<pre>
+  #include <sys/socket.h>
+  int getsockopt(int sockfd, int level, int option,
+                 void *value, socklen_t *value_len);
+</pre>
+<p>
+  <b>Description:</b>
+  <code>getsockopt()</code> retrieve thse value for the option specified by the
+  <code>option</code> argument for the socket specified by the <code>sockfd</code> argument. If
+  the size of the option value is greater than <code>value_len</code>, the value
+  stored in the object pointed to by the <code>value</code> argument will be silently
+  truncated. Otherwise, the length pointed to by the <code>value_len</code> argument
+  will be modified to indicate the actual length of the<code>value</code>.
+</p>
+<p>
+  The <code>level</code> argument specifies the protocol level of the option. To
+  retrieve options at the socket level, specify the level argument as
+  SOL_SOCKET.
+</p>
+<p>
+  See <sys/socket.h> a complete list of values for the <code>option</code> argument.
+</p>
+<p>
+  <b>Input Parameters:</b>
+</p>
+<ul>
+  <li><code>sockfd    Socket descriptor of socket
+  <li><code>level     Protocol level to set the option
+  <li><code>option    identifies the option to get
+  <li><code>value     Points to the argument value
+  <li><code>value_len The length of the argument value
+</ul>
+<p>
+  <b>Returned Values:</b>
+  On success, returns the number of characters sent.
+  On error, -1 is returned, and errno is set appropriately:
+</p>
+<ul>
+  <li><code>BADF</code>.
+    The <code>sockfd</code> argument is not a valid socket descriptor.</li>
+  <li><code>INVAL</code>.
+    The specified option is invalid at the specified socket <code>level</code> or the
+    socket has been shutdown.</li>
+  <li><code>NOPROTOOPT</code>.
+    The <code>option</code> is not supported by the protocol.</li>
+  <li><code>NOTSOCK</code>.
+    The <code>sockfd</code> argument does not refer to a socket.</li>
+  <li><code>NOBUFS
+    Insufficient resources are available in the system to complete the call.</li>
+</ul>
+
 <hr>
 <h1>3.0 <A NAME="Data_Structures">OS Data Structures</a></h1>
 <H2>3.1 Scalar types</H2>
@@ -5815,8 +6311,8 @@ function call:
 <b>Description</b>:  <I>osGetErrnorPtr()</I> returns a pointer to
 the thread-specific <I>errno</I> value.
 <p>
-This differs somewhat from the use for errno in a multi-threaded process environment:
-Each pthread will have its own private copy of errno and the errno will not be shared
+This differs somewhat from the use for<code>errno</code>in a multi-threaded process environment:
+Each pthread will have its own private copy of<code>errno</code>and the<code>errno</code>will not be shared
 between pthreads.
 <p>
 <b>Input Parameters</b>:  None
@@ -5970,17 +6466,22 @@ notify a task when a message is available on a queue.
 </p>
 
 <h1><a name="index">Index</a></h1>
-<ul>
+<table width="100%">
+<tr>
+<td>
+  <li><a href="#bind">bind</a></li>
   <li><a href="#clockgetres">clock_getres</a></li>
   <li><a href="#clockgettime">clock_gettime</a></li>
   <li><a href="#ClocksNTimers">Clocks</a></li>
   <li><a href="#clocksettime">clock_settime</a></li>
+  <li><a href="#connect">connect</a></li>
   <li><a href="#Data_Structures">Data structures</a></li>
   <li><a href="#directoryoperations">Directory operations</a></li>
   <li><a href="#driveroperations">Driver operations</a></li>
   <li><a href="#exit">exit</a></li>
   <li><a href="#FileSystem">Filesystem interfaces</a></li>
   <li><a href="#getpid">getpid</a></li>
+  <li><a href="#getsockopt">getsockopt</a></li>
   <li><a href="#gmtimer">gmtime_r</a></li>
   <li><a href="#Introduction">Introduction</a>
   <li><a href="#kill">kill</a></li>
@@ -5997,6 +6498,7 @@ notify a task when a message is available on a queue.
   <li><a href="#mqtimedreceive">mq_timedreceive</a></li>
   <li><a href="#mqtimedsend">mq_timedsend</a></li>
   <li><a href="#mqunlink">mq_unlink</a></li>
+  <li><a href="#Network">Network Interfaces</a></li>
   <li><a href="#OS_Interfaces">OS Interfaces</a>
   <li><a href="#Pthread">Pthread Interfaces</a>
   <li><a href="#pthreadattrdestroy">pthread_attr_destroy</a></li>
@@ -6040,6 +6542,8 @@ notify a task when a message is available on a queue.
   <li><a href="#pthreadmutexattrsetpshared">pthread_mutexattr_setpshared</a></li>
   <li><a href="#pthreadmutexdestrory">pthread_mutex_destroy</a></li>
   <li><a href="#pthreadmutexinit">pthread_mutex_init</a></li>
+</td>
+<td>
   <li><a href="#pthreadmutexlock">pthread_mutex_lock</a></li>
   <li><a href="#pthreadmutextrylock">pthread_mutex_trylock</a></li>
   <li><a href="#pthreadmutexunlock">pthread_mutex_unlock</a></li>
@@ -6052,6 +6556,8 @@ notify a task when a message is available on a queue.
   <li><a href="#pthreadsigmask">pthread_sigmask</a></li>
   <li><a href="#pthreadtestcancelstate">pthread_testcancelstate</a></li>
   <li><a href="#pthreadyield">pthread_yield</a></li>
+  <li><a href="#recv">recv</a></li>
+  <li><a href="#recvfrom">recvfrom</a></li>
   <li><a href="#schedgetparam">sched_getparam</a></li>
   <li><a href="#schedgetprioritymax">sched_get_priority_max</a></li>
   <li><a href="#schedgetprioritymin">sched_get_priority_min</a></li>
@@ -6073,6 +6579,9 @@ notify a task when a message is available on a queue.
   <li><a href="#semunlink">sem_unlink</a></li>
   <li><a href="#semwait">sem_wait</a></li>
   <li><a href="#setgetscheduler">sched_getscheduler</a></li>
+  <li><a href="#send">send</a></li>
+  <li><a href="#sendto">sendto</a></li>
+  <li><a href="#setsockopt">setsockopt</a></li>
   <li><a href="#sigaction">sigaction</a></li>
   <li><a href="#sigaddset">sigaddset</a></li>
   <li><a href="#sigdelset">sigdelset</a></li>
@@ -6086,6 +6595,7 @@ notify a task when a message is available on a queue.
   <li><a href="#sigsuspend">sigsuspend</a></li>
   <li><a href="#sigtimedwait">sigtimedwait</a></li>
   <li><a href="#sigwaitinfo">sigwaitinfo</a></li>
+  <li><a href="#socket">socket</a></li>
   <li><a href="#standardio">Standard I/O</a></li>
   <li><a href="#taskactivate">task_activate</a></li>
   <li><a href="#Task_Control">Task Control Interfaces</a>
@@ -6107,7 +6617,9 @@ notify a task when a message is available on a queue.
   <li><a href="#wddelete">wd_delete</a></li>
   <li><a href="#wdgettime">wd_gettime</a></li>
   <li><a href="#wdstart">wd_start</a></li>
-</ul>
+</td>
+</tr>
+</table>
 
 </BODY>
 </HTML>
diff --git a/net/bind.c b/net/bind.c
index 97ff479b4e87da3e09b077e12d5f507724fcea19..118d1d82f42bdd3b92b146b625ae8ddf07622dcc 100644
--- a/net/bind.c
+++ b/net/bind.c
@@ -54,15 +54,15 @@
  * Function: bind
  *
  * Description:
- *   bind() gives the socket sockfd the local address my_addr. my_addr is
- *   addrlen bytes long. Traditionally, this is called “assigning a name to
- *   a socket.” When a socket is created with socket(2), it exists in a name
+ *   bind() gives the socket 'sockfd' the local address 'addr'. 'addr' is
+ *   'addrlen' bytes long. Traditionally, this is called “assigning a name to
+ *   a socket.” When a socket is created with socket, it exists in a name
  *   space (address family) but has no name assigned.
  *
  * Parameters:
  *   sockfd   Socket descriptor from socket
  *   addr     Socket local address
- *   addrlen  Length of my_addr
+ *   addrlen  Length of 'addr'
  *
  * Returned Value:
  *   0 on success; -1 on error with errno set appropriately
diff --git a/net/connect.c b/net/connect.c
index bbc112f19d86ea01b5b97e5f4d97bc2fcc1ba5c7..32f962ec098cd5c51409e6470ea809cebdbea8af 100644
--- a/net/connect.c
+++ b/net/connect.c
@@ -55,15 +55,15 @@
  *
  * Description:
  *   connect() connects the socket referred to by the file descriptor sockfd
- *   to the address specified by serv_addr. The addrlen argument specifies
- *   the size of serv_addr.  The format of the address in serv_addr is
+ *   to the address specified by 'addr'. The addrlen argument specifies
+ *   the size of 'addr'.  The format of the address in 'addr' is
  *   determined by the address space of the socket sockfd.
  *
- *   If the socket sockfd is of type SOCK_DGRAM then serv_addr is the address
+ *   If the socket sockfd is of type SOCK_DGRAM then 'addr' is the address
  *   to which datagrams are sent by default, and the only address from which
  *   datagrams are received. If the socket is of type SOCK_STREAM or
  *   SOCK_SEQPACKET, this call attempts to make a connection to the socket
- *   that is bound to the address specified by serv_addr.
+ *   that is bound to the address specified by 'addr'.
  *
  *   Generally, connection-based protocol sockets may successfully connect()
  *   only once; connectionless protocol sockets may use connect() multiple
@@ -73,8 +73,8 @@
  *
  * Parameters:
  *   sockfd    Socket descriptor returned by socket()
- *   serv_addr Server address (form depends on type of socket)
- *   addrlen   Lenght of actual serv_addr
+ *   addr      Server address (form depends on type of socket)
+ *   addrlen   Length of actual 'addr'
  *
  * Returned Value:
  *   0 on success; -1 on error with errno set appropriately
diff --git a/net/recvfrom.c b/net/recvfrom.c
index ac1f5f2bb08a5aaddbd6e1f985734181590cc19d..735f767f17de378ac0bb6d4e3f2533be8335fe39 100644
--- a/net/recvfrom.c
+++ b/net/recvfrom.c
@@ -152,7 +152,7 @@ void recvfrom_interrupt(void *private)
  *   EINVAL
  *     Invalid argument passed.
  *   ENOMEM
- *     Could not allocate memory for recvmsg().
+ *     Could not allocate memory.
  *   ENOTCONN
  *     The socket is associated with a connection-oriented protocol and has
  *     not been connected.
diff --git a/netutils/README b/netutils/README
index 9f6969b5f11e1bb8e75b0d0e17412b5fa3c9ca57..443b0636e59d75bdb2f960952166629bc77008e7 100644
--- a/netutils/README
+++ b/netutils/README
@@ -2,4 +2,4 @@ netutils
 ^^^^^^^^
 
 This directory contains most of the network applications contained under the uIP-1.0 apps directory.
-As the uIP apps/README says, there applications "are not all heavily tested."
\ No newline at end of file
+As the uIP apps/README says, these applications "are not all heavily tested."