9
0
Fork 0

Unix domain: More fixes. With these changes, apps/examples/ustream works

This commit is contained in:
Gregory Nutt 2015-01-28 08:39:48 -06:00
parent 94cc8d6362
commit 0c2fbe6e8f
9 changed files with 39 additions and 27 deletions

View File

@ -103,7 +103,7 @@ int client_main(int argc, char *argv[])
strncpy(myaddr.sun_path, CONFIG_EXAMPLES_USTREAM_ADDR, addrlen);
myaddr.sun_path[addrlen] = '\0';
printf("client: Connecting...\n");
printf("client: Connecting to %s...\n", CONFIG_EXAMPLES_USTREAM_ADDR);
addrlen += sizeof(sa_family_t) + 1;
ret = connect( sockfd, (struct sockaddr *)&myaddr, addrlen);
if (ret < 0)
@ -176,6 +176,7 @@ int client_main(int argc, char *argv[])
goto errout_with_socket;
}
printf("client: Terminating\n");
close(sockfd);
free(outbuf);
free(inbuf);

View File

@ -113,6 +113,8 @@ int server_main(int argc, char *argv[])
/* Listen for connections on the bound socket */
printf("server: Accepting connections on %s ...\n", CONFIG_EXAMPLES_USTREAM_ADDR);
if (listen(listensd, 5) < 0)
{
printf("server: listen failure %d\n", errno);
@ -121,7 +123,6 @@ int server_main(int argc, char *argv[])
/* Accept only one connection */
printf("server: Accepting connections on %s\n", CONFIG_EXAMPLES_USTREAM_ADDR);
acceptsd = accept(listensd, (struct sockaddr*)&myaddr, &addrlen);
if (acceptsd < 0)
{
@ -187,14 +188,7 @@ int server_main(int argc, char *argv[])
}
printf("server: Sent %d bytes\n", nbytessent);
/* If this platform only does abortive disconnects, then wait a bit to get the
* client side a change to receive the data.
*/
printf("server: Wait before closing\n");
sleep(60);
printf("server: Terminating\n");
close(listensd);
close(acceptsd);
free(buffer);

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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;
}

View File

@ -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 */

View File

@ -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 */