Unix domain: More fixes. With these changes, apps/examples/ustream works
This commit is contained in:
parent
5f9837dcc8
commit
cba78c7349
7 changed files with 34 additions and 17 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue