--- IO-FDPass/FDPass.xs 2013/04/05 04:10:51 1.1 +++ IO-FDPass/FDPass.xs 2013/04/05 04:32:50 1.3 @@ -1,7 +1,3 @@ -/* GetCurrentProcessId is XP and up, which means in all supported versions */ -/* but older SDK's might need this */ -#define _WIN32_WINNT NTDDI_WINXP - #ifdef __sun #define _XOPEN_SOURCE 1 #define _XOPEN_SOURCE_EXTENDED 1 @@ -61,14 +57,14 @@ while (got != len) { int sze = wr - ? send ((SOCKET)fd, buf, len) /* we assume send and recv are macros with arguments */ - : recv ((SOCKET)fd, buf, len); /* to be on the safe side */ + ? send ((SOCKET)fd, buf, len, 0) /* we assume send and recv are macros with arguments */ + : recv ((SOCKET)fd, buf, len, 0); /* to be on the safe side */ if (sze <= 0) { - if (errno == EAGAIN || errno == EWOULDBLOCK || errno == WSAWOULDBLOCK) + if (errno == EAGAIN || errno == WSAEWOULDBLOCK) { - ioctlsocket (s, FIONBIO, &nbio); + ioctlsocket (fd, FIONBIO, &nbio); nbio = 1; } else @@ -79,7 +75,7 @@ } if (nbio) - ioctlsocket (s, FIONBIO, &nbio); + ioctlsocket (fd, FIONBIO, &nbio); return got == len; } @@ -93,7 +89,7 @@ HANDLE target, h; /* seriously, there is no way to query whether a socket is non-blocking?? */ - if (rw (0, socket, (char *)&pid, sizeof (pid), 0) != sizeof (pid)) + if (!rw (0, socket, (char *)&pid, sizeof (pid))) return 0; target = OpenProcess (PROCESS_DUP_HANDLE, FALSE, pid); @@ -105,7 +101,7 @@ CloseHandle (target); - if (rw (1, socket, (char *)&h, sizeof (h), 0) != sizeof (h)) + if (!rw (1, socket, (char *)&h , sizeof (h ))) return 0; return 1; @@ -153,10 +149,10 @@ DWORD pid = GetCurrentProcessId (); HANDLE h; - if (rw (1, socket, (char *)&pid, sizeof (pid), 0) != sizeof (pid)) + if (!rw (1, socket, (char *)&pid, sizeof (pid))) return -1; - if (rw (0, socket, (char *)&h, sizeof (h), 0) != sizeof (h)) + if (!rw (0, socket, (char *)&h , sizeof (h ))) return -1; return _open_osfhandle ((intptr_t)h, 0);