diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2015-01-28 08:39:48 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2015-01-28 08:39:48 -0600 |
commit | 0c2fbe6e8fd903f562fd092892990f8ebeadc0a7 (patch) | |
tree | fa06094118b790c661ab4a81340a9dc4dc38a945 /nuttx/net | |
parent | 94cc8d63622caad406be864d21bde2fc9ca9e886 (diff) | |
download | px4-nuttx-0c2fbe6e8fd903f562fd092892990f8ebeadc0a7.tar.gz px4-nuttx-0c2fbe6e8fd903f562fd092892990f8ebeadc0a7.tar.bz2 px4-nuttx-0c2fbe6e8fd903f562fd092892990f8ebeadc0a7.zip |
Unix domain: More fixes. With these changes, apps/examples/ustream works
Diffstat (limited to 'nuttx/net')
-rw-r--r-- | nuttx/net/local/local_connect.c | 12 | ||||
-rw-r--r-- | nuttx/net/local/local_fifo.c | 4 | ||||
-rw-r--r-- | nuttx/net/local/local_recvfrom.c | 2 | ||||
-rw-r--r-- | nuttx/net/local/local_recvutils.c | 14 | ||||
-rw-r--r-- | nuttx/net/local/local_send.c | 11 | ||||
-rw-r--r-- | nuttx/net/socket/send.c | 4 |
6 files changed, 30 insertions, 17 deletions
diff --git a/nuttx/net/local/local_connect.c b/nuttx/net/local/local_connect.c index c10de214a..57e32a1b1 100644 --- a/nuttx/net/local/local_connect.c +++ b/nuttx/net/local/local_connect.c @@ -176,7 +176,7 @@ int inline local_stream_connect(FAR struct local_conn_s *client, /* Yes.. open the read-only FIFO */ - ret = local_open_client_tx(client); + ret = local_open_client_rx(client); if (ret < 0) { ndbg("ERROR: Failed to open write-only FIFOs for %s: %d\n", @@ -268,21 +268,27 @@ int local_connect(FAR struct local_conn_s *client, { if (strncmp(conn->lc_path, unaddr->sun_path, UNIX_PATH_MAX-1) == 0) { + int ret = OK; + /* Bind the address and protocol */ client->lc_proto = conn->lc_proto; strncpy(client->lc_path, unaddr->sun_path, UNIX_PATH_MAX-1); client->lc_path[UNIX_PATH_MAX-1] = '\0'; + /* The client is now bound to an address */ + + client->lc_state = LOCAL_STATE_BOUND; + /* We have to do more for the SOCK_STREAM family */ if (conn->lc_proto == SOCK_STREAM) { - return local_stream_connect(client, conn, state); + ret = local_stream_connect(client, conn, state); } net_unlock(state); - return OK; + return ret; } } break; diff --git a/nuttx/net/local/local_fifo.c b/nuttx/net/local/local_fifo.c index 15ded2932..ee5cb1072 100644 --- a/nuttx/net/local/local_fifo.c +++ b/nuttx/net/local/local_fifo.c @@ -237,8 +237,8 @@ static inline int local_rx_open(FAR struct local_conn_s *conn, static inline int local_tx_open(FAR struct local_conn_s *conn, FAR const char *path) { - conn->lc_infd = open(path, O_WRONLY); - if (conn->lc_infd < 0) + conn->lc_outfd = open(path, O_WRONLY); + if (conn->lc_outfd < 0) { int errcode = errno; DEBUGASSERT(errcode > 0); diff --git a/nuttx/net/local/local_recvfrom.c b/nuttx/net/local/local_recvfrom.c index c4c9e6a6c..7ce5bb0da 100644 --- a/nuttx/net/local/local_recvfrom.c +++ b/nuttx/net/local/local_recvfrom.c @@ -179,7 +179,7 @@ ssize_t psock_local_recvfrom(FAR struct socket *psock, FAR void *buf, * the size of the next packet. */ - ret = local_sync(conn->lc_infd); + ret = local_sync(conn->lc_infd); if (ret < 0) { ndbg("ERROR: Failed to get packet length: %d\n", ret); diff --git a/nuttx/net/local/local_recvutils.c b/nuttx/net/local/local_recvutils.c index a7eee1c4a..7457268ec 100644 --- a/nuttx/net/local/local_recvutils.c +++ b/nuttx/net/local/local_recvutils.c @@ -76,16 +76,16 @@ int local_fifo_read(int fd, FAR uint8_t *buf, size_t *len) { - ssize_t total; + ssize_t remaining; ssize_t nread; int ret; DEBUGASSERT(buf && len); - total = 0; - while (len > 0) + remaining = *len; + while (remaining > 0) { - nread = read(fd, buf, *len); + nread = read(fd, buf, remaining); if (nread < 0) { int errcode = errno; @@ -112,15 +112,15 @@ int local_fifo_read(int fd, FAR uint8_t *buf, size_t *len) else { DEBUGASSERT(nread <= len); - len -= nread; - buf += nread; + remaining -= nread; + buf += nread; } } ret = OK; errout: - *len = total; + *len -= remaining; return ret; } diff --git a/nuttx/net/local/local_send.c b/nuttx/net/local/local_send.c index 74bf7f0a4..7910612e4 100644 --- a/nuttx/net/local/local_send.c +++ b/nuttx/net/local/local_send.c @@ -76,6 +76,7 @@ ssize_t psock_local_send(FAR struct socket *psock, FAR const void *buf, size_t len, int flags) { FAR struct local_conn_s *peer; + int ret; DEBUGASSERT(psock && psock->s_conn && buf); peer = (FAR struct local_conn_s *)psock->s_conn; @@ -84,14 +85,20 @@ ssize_t psock_local_send(FAR struct socket *psock, FAR const void *buf, * outgoing FIFO for write-only access. */ - if (peer->lc_type != LOCAL_STATE_CONNECTED || + if (peer->lc_state != LOCAL_STATE_CONNECTED || peer->lc_outfd < 0) { ndbg("ERROR: not connected\n"); return -ENOTCONN; } - return local_send_packet(peer->lc_outfd, (FAR uint8_t *)buf, len); + /* Send the packet */ + + ret = local_send_packet(peer->lc_outfd, (FAR uint8_t *)buf, len); + + /* If the send was successful, then the full packet will have been sent */ + + return ret < 0 ? ret : len; } #endif /* CONFIG_NET && CONFIG_NET_LOCAL */ diff --git a/nuttx/net/socket/send.c b/nuttx/net/socket/send.c index ddcc97ea3..6ac569cb1 100644 --- a/nuttx/net/socket/send.c +++ b/nuttx/net/socket/send.c @@ -38,7 +38,7 @@ ****************************************************************************/ #include <nuttx/config.h> -#if defined(CONFIG_NET) && defined(CONFIG_NET_TCP) +#if defined(CONFIG_NET_TCP) || defined(CONFIG_NET_LOCAL) #include <sys/types.h> #include <sys/socket.h> @@ -243,4 +243,4 @@ ssize_t send(int sockfd, FAR const void *buf, size_t len, int flags) return psock_send(sockfd_socket(sockfd), buf, len, flags); } -#endif /* CONFIG_NET && CONFIG_NET_TCP */ +#endif /* CONFIG_NET_TCP || CONFIG_NET_LOCAL */ |