Raw sockets: Various fixes for closing, free connections, TX from Daniel Lazo Sitzer

This commit is contained in:
Gregory Nutt 2014-06-18 09:46:45 -06:00
parent 3ec359d14c
commit 04e564c9c3
2 changed files with 30 additions and 0 deletions

View File

@ -433,6 +433,32 @@ int psock_close(FAR struct socket *psock)
switch (psock->s_type)
{
#ifdef CONFIG_NET_PKT
case SOCK_RAW:
{
struct uip_pkt_conn *conn = psock->s_conn;
/* Is this the last reference to the connection structure (there
* could be more if the socket was dup'ed).
*/
if (conn->crefs <= 1)
{
/* Yes... free the connection structure */
conn->crefs = 0; /* No more references on the connection */
uip_pktfree(psock->s_conn); /* Free uIP resources */
}
else
{
/* No.. Just decrement the reference count */
conn->crefs--;
}
}
break;
#endif
#ifdef CONFIG_NET_TCP
case SOCK_STREAM:
{

View File

@ -195,6 +195,10 @@ static uint16_t pktsend_interrupt(FAR struct uip_driver_s *dev,
if (pstate->snd_buflen > 0 && pstate->snd_buflen < CONFIG_NET_BUFSIZE)
{
memcpy(dev->d_buf, pstate->snd_buffer, pstate->snd_buflen);
/* Set the number of bytes to send */
dev->d_len = pstate->snd_buflen;
dev->d_sndlen = pstate->snd_buflen;
}