ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-FDPass/FDPass.xs
(Generate patch)

Comparing IO-FDPass/FDPass.xs (file contents):
Revision 1.1 by root, Fri Apr 5 04:10:51 2013 UTC vs.
Revision 1.2 by root, Fri Apr 5 04:26:41 2013 UTC

59 int got = 0; 59 int got = 0;
60 60
61 while (got != len) 61 while (got != len)
62 { 62 {
63 int sze = wr 63 int sze = wr
64 ? send ((SOCKET)fd, buf, len) /* we assume send and recv are macros with arguments */ 64 ? send ((SOCKET)fd, buf, len, 0) /* we assume send and recv are macros with arguments */
65 : recv ((SOCKET)fd, buf, len); /* to be on the safe side */ 65 : recv ((SOCKET)fd, buf, len, 0); /* to be on the safe side */
66 66
67 if (sze <= 0) 67 if (sze <= 0)
68 { 68 {
69 if (errno == EAGAIN || errno == EWOULDBLOCK || errno == WSAWOULDBLOCK) 69 if (errno == EAGAIN || errno == WSAEWOULDBLOCK)
70 { 70 {
71 ioctlsocket (s, FIONBIO, &nbio); 71 ioctlsocket (fd, FIONBIO, &nbio);
72 nbio = 1; 72 nbio = 1;
73 } 73 }
74 else 74 else
75 break; 75 break;
76 } 76 }
77 else 77 else
78 got += sze; 78 got += sze;
79 } 79 }
80 80
81 if (nbio) 81 if (nbio)
82 ioctlsocket (s, FIONBIO, &nbio); 82 ioctlsocket (fd, FIONBIO, &nbio);
83 83
84 return got == len; 84 return got == len;
85} 85}
86#endif 86#endif
87 87
91#if defined(WIN32) 91#if defined(WIN32)
92 DWORD pid; 92 DWORD pid;
93 HANDLE target, h; 93 HANDLE target, h;
94 94
95 /* seriously, there is no way to query whether a socket is non-blocking?? */ 95 /* seriously, there is no way to query whether a socket is non-blocking?? */
96 if (rw (0, socket, (char *)&pid, sizeof (pid), 0) != sizeof (pid)) 96 if (!rw (0, socket, (char *)&pid, sizeof (pid)))
97 return 0; 97 return 0;
98 98
99 target = OpenProcess (PROCESS_DUP_HANDLE, FALSE, pid); 99 target = OpenProcess (PROCESS_DUP_HANDLE, FALSE, pid);
100 if (!target) 100 if (!target)
101 croak ("AnyEvent::ProcessPool::fd_recv: OpenProcess failed"); 101 croak ("AnyEvent::ProcessPool::fd_recv: OpenProcess failed");
103 if (!DuplicateHandle ((HANDLE)-1, (HANDLE)_get_osfhandle (fd), target, &h, 0, FALSE, DUPLICATE_SAME_ACCESS)) 103 if (!DuplicateHandle ((HANDLE)-1, (HANDLE)_get_osfhandle (fd), target, &h, 0, FALSE, DUPLICATE_SAME_ACCESS))
104 croak ("AnyEvent::ProcessPool::fd_recv: DuplicateHandle failed"); 104 croak ("AnyEvent::ProcessPool::fd_recv: DuplicateHandle failed");
105 105
106 CloseHandle (target); 106 CloseHandle (target);
107 107
108 if (rw (1, socket, (char *)&h, sizeof (h), 0) != sizeof (h)) 108 if (!rw (1, socket, (char *)&h , sizeof (h )))
109 return 0; 109 return 0;
110 110
111 return 1; 111 return 1;
112 112
113#else 113#else
151{ 151{
152#if defined(WIN32) 152#if defined(WIN32)
153 DWORD pid = GetCurrentProcessId (); 153 DWORD pid = GetCurrentProcessId ();
154 HANDLE h; 154 HANDLE h;
155 155
156 if (rw (1, socket, (char *)&pid, sizeof (pid), 0) != sizeof (pid)) 156 if (!rw (1, socket, (char *)&pid, sizeof (pid)))
157 return -1; 157 return -1;
158 158
159 if (rw (0, socket, (char *)&h, sizeof (h), 0) != sizeof (h)) 159 if (!rw (0, socket, (char *)&h , sizeof (h )))
160 return -1; 160 return -1;
161 161
162 return _open_osfhandle ((intptr_t)h, 0); 162 return _open_osfhandle ((intptr_t)h, 0);
163#else 163#else
164 void *buf = malloc (CMSG_SPACE (sizeof (int))); 164 void *buf = malloc (CMSG_SPACE (sizeof (int)));

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines