|
|
@ -38,16 +38,20 @@ |
|
|
|
#include <limits.h> /* PATH_MAX */ |
|
|
|
#include <sys/uio.h> /* writev */ |
|
|
|
|
|
|
|
#ifdef __linux__ |
|
|
|
# include <sys/ioctl.h> |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef __sun |
|
|
|
# include <sys/types.h> |
|
|
|
# include <sys/wait.h> |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(__APPLE__) |
|
|
|
#ifdef __APPLE__ |
|
|
|
# include <mach-o/dyld.h> /* _NSGetExecutablePath */ |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(__FreeBSD__) |
|
|
|
#ifdef __FreeBSD__ |
|
|
|
# include <sys/sysctl.h> |
|
|
|
# include <sys/wait.h> |
|
|
|
#endif |
|
|
@ -593,7 +597,11 @@ static int uv_getaddrinfo_done(eio_req* req) { |
|
|
|
free(handle->service); |
|
|
|
free(handle->hostname); |
|
|
|
|
|
|
|
if (handle->retcode != 0) { |
|
|
|
if (handle->retcode == 0) { |
|
|
|
/* OK */ |
|
|
|
} else if (handle->retcode == EAI_NONAME || handle->retcode == EAI_NODATA) { |
|
|
|
uv__set_sys_error(handle->loop, ENOENT); /* FIXME compatibility hack */ |
|
|
|
} else { |
|
|
|
handle->loop->last_err.code = UV_EADDRINFO; |
|
|
|
handle->loop->last_err.sys_errno_ = handle->retcode; |
|
|
|
} |
|
|
@ -734,6 +742,9 @@ int uv__close(int fd) { |
|
|
|
|
|
|
|
|
|
|
|
int uv__nonblock(int fd, int set) { |
|
|
|
#if FIONBIO |
|
|
|
return ioctl(fd, FIONBIO, &set); |
|
|
|
#else |
|
|
|
int flags; |
|
|
|
|
|
|
|
if ((flags = fcntl(fd, F_GETFL)) == -1) { |
|
|
@ -751,10 +762,17 @@ int uv__nonblock(int fd, int set) { |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int uv__cloexec(int fd, int set) { |
|
|
|
#if __linux__ |
|
|
|
/* Linux knows only FD_CLOEXEC so we can safely omit the fcntl(F_GETFD)
|
|
|
|
* syscall. CHECKME: That's probably true for other Unices as well. |
|
|
|
*/ |
|
|
|
return fcntl(fd, F_SETFD, set ? FD_CLOEXEC : 0); |
|
|
|
#else |
|
|
|
int flags; |
|
|
|
|
|
|
|
if ((flags = fcntl(fd, F_GETFD)) == -1) { |
|
|
@ -772,6 +790,7 @@ int uv__cloexec(int fd, int set) { |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|