diff options
Diffstat (limited to 'nuttx')
-rw-r--r-- | nuttx/arch/sim/src/nuttx-names.dat | 4 | ||||
-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 |
7 files changed, 34 insertions, 17 deletions
diff --git a/nuttx/arch/sim/src/nuttx-names.dat b/nuttx/arch/sim/src/nuttx-names.dat index bfd3c051c..5456f2722 100644 --- a/nuttx/arch/sim/src/nuttx-names.dat +++ b/nuttx/arch/sim/src/nuttx-names.dat @@ -26,10 +26,14 @@ nanosleep NXnanosleep pthread_create NXpthread_create read NXread realloc NXrealloc +recv NXrecv +recvfrom NXrecvfrom rewinddir NXrewinddir rmdir NXrmdir seekdir NXseekdir select NXselect +send NXsend +sendto NXsendto sleep NXsleep socket NXsocket stat NXstat 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 */ |