Skip to content
This repository has been archived by the owner on May 4, 2018. It is now read-only.

Commit

Permalink
unix: fix uv_pipe_connect() with existing fd
Browse files Browse the repository at this point in the history
Don't create a new socket descriptor if one has been previously assigned with
uv_pipe_open().
  • Loading branch information
bnoordhuis committed Jul 19, 2012
1 parent e3a2850 commit ff59525
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions src/unix/pipe.c
Expand Up @@ -170,16 +170,17 @@ void uv_pipe_connect(uv_connect_t* req,
uv_connect_cb cb) {
struct sockaddr_un saddr;
int saved_errno;
int sockfd;
int new_sock;
int err;
int r;

saved_errno = errno;
sockfd = -1;
new_sock = (handle->fd == -1);
err = -1;

if ((sockfd = uv__socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
goto out;
if (new_sock)
if ((handle->fd = uv__socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
goto out;

memset(&saddr, 0, sizeof saddr);
uv_strlcpy(saddr.sun_path, name, sizeof(saddr.sun_path));
Expand All @@ -189,19 +190,19 @@ void uv_pipe_connect(uv_connect_t* req,
* is either there or not.
*/
do {
r = connect(sockfd, (struct sockaddr*)&saddr, sizeof saddr);
r = connect(handle->fd, (struct sockaddr*)&saddr, sizeof saddr);
}
while (r == -1 && errno == EINTR);

if (r == -1) {
err = errno;
close(sockfd);
if (r == -1)
goto out;
}

uv__stream_open((uv_stream_t*)handle,
sockfd,
UV_STREAM_READABLE | UV_STREAM_WRITABLE);
if (new_sock)
if (uv__stream_open((uv_stream_t*)handle,
handle->fd,
UV_STREAM_READABLE | UV_STREAM_WRITABLE))
goto out;

uv__io_start(handle->loop, &handle->read_watcher);
uv__io_start(handle->loop, &handle->write_watcher);
err = 0;
Expand Down

0 comments on commit ff59525

Please sign in to comment.