Cosmetic update to a document and some comments.

This commit is contained in:
Gregory Nutt 2017-10-25 11:17:38 -06:00
parent c0bf0b4d9d
commit c3ce23ba35
2 changed files with 41 additions and 2 deletions

View File

@ -8,7 +8,7 @@
<tr align="center" bgcolor="#e4e4e4"> <tr align="center" bgcolor="#e4e4e4">
<td> <td>
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1> <h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
<p>Last Updated: October 24, 2017</p> <p>Last Updated: October 25, 2017</p>
</td> </td>
</tr> </tr>
</table> </table>
@ -800,7 +800,23 @@
<td><br></td> <td><br></td>
<td> <td>
<p> <p>
<li>Address Families: IPv4/IPv6 (<code>AF_INET</code>/<code>AF_INET6</code>), Raw socket (<code>AF_PACKET</code>), raw IEEE 802.15.4 (<code>AF_IEEE802154</code>), raw ICMP and ICMPv6 protocol ping sockets, local, Unix domain socket support (<code>AF_LOCAL</code>), and custom user sockets.</li> <li>Address Families: IPv4/IPv6 (<code>AF_INET</code>/<code>AF_INET6</code>), Raw socket (<code>AF_PACKET</code>), raw IEEE 802.15.4 (<code>AF_IEEE802154</code>), and local, Unix domain socket support (<code>AF_LOCAL</code>).</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Special <code>INET</code> protocol sockets: Raw ICMP and ICMPv6 protocol ping sockets (<code>IPPROTO_ICMP</code>).</li>
</p>
</td>
</tr>
<tr>
<td><br></td>
<td>
<p>
<li>Custom user sockets.</li>
</p> </p>
</td> </td>
</tr> </tr>

View File

@ -364,6 +364,29 @@ int psock_tcp_connect(FAR struct socket *psock,
/* Wait for either the connect to complete or for an error/timeout /* Wait for either the connect to complete or for an error/timeout
* to occur. NOTES: net_lockedwait will also terminate if a signal * to occur. NOTES: net_lockedwait will also terminate if a signal
* is received. * is received.
*
* REVISIT: This failure has been reported:
* - psock_tcp_accept() waits on net_lockedwait() below
* - The accept operation completes, the socket is in the connected
* state and psock_accept() is awakened. It cannot run,
* however, because its priority is low and so it is blocked
* from execution.
* - In the mean time, the remote host sends a
* packet which is presumeably caught in the read-ahead buffer.
* - Then the remote host closes the socket. Nothing happens on
* the target side because net_start_monitor() has not yet been
* called.
* - Then accept() finally runs, but not with a connected but
* rather with a disconnected socket. This fails when it
* attempts to start the network monitor on the disconnected
* socket below.
* - It is also impossible to read the buffered TCP data from a
* disconnected socket. The TCP recvfrom() logic would also
* need to permit reading buffered data from a disconnected
* socket.
*
* A work-around is to raise the priority of the thread that calls
* accept().
*/ */
ret = net_lockedwait(&state.tc_sem); ret = net_lockedwait(&state.tc_sem);