ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/schmorp.h
(Generate patch)

Comparing IO-AIO/schmorp.h (file contents):
Revision 1.13 by root, Sun Apr 14 09:43:18 2013 UTC vs.
Revision 1.18 by root, Tue Feb 20 06:05:19 2018 UTC

232} 232}
233 233
234/*****************************************************************************/ 234/*****************************************************************************/
235/* portable pipe/socketpair */ 235/* portable pipe/socketpair */
236 236
237#ifdef USE_SOCKETS_AS_HANDLES 237#if defined(USE_SOCKETS_AS_HANDLES) || PERL_VERSION_ATLEAST(5,18,0)
238# define S_TO_HANDLE(x) ((HANDLE)win32_get_osfhandle (x)) 238# define S_TO_HANDLE(x) ((HANDLE)win32_get_osfhandle (x))
239#else 239#else
240# define S_TO_HANDLE(x) ((HANDLE)x) 240# define S_TO_HANDLE(x) ((HANDLE)x)
241#endif 241#endif
242 242
253 struct sockaddr_in adr2; 253 struct sockaddr_in adr2;
254 int adr2_size = sizeof (adr2); 254 int adr2_size = sizeof (adr2);
255 SOCKET listener; 255 SOCKET listener;
256 SOCKET sock [2] = { -1, -1 }; 256 SOCKET sock [2] = { -1, -1 };
257 257
258 if ((listener = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) 258 if ((listener = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
259 return -1; 259 return -1;
260 260
261 addr.sin_family = AF_INET; 261 addr.sin_family = AF_INET;
262 addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); 262 addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
263 addr.sin_port = 0; 263 addr.sin_port = 0;
269 goto fail; 269 goto fail;
270 270
271 if (listen (listener, 1)) 271 if (listen (listener, 1))
272 goto fail; 272 goto fail;
273 273
274 if ((sock [0] = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) 274 if ((sock [0] = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
275 goto fail; 275 goto fail;
276 276
277 if (connect (sock [0], (struct sockaddr *)&addr, addr_size)) 277 if (connect (sock [0], (struct sockaddr *)&addr, addr_size))
278 goto fail; 278 goto fail;
279 279
304 || addr.sin_port != adr2.sin_port) 304 || addr.sin_port != adr2.sin_port)
305 goto fail; 305 goto fail;
306 306
307 closesocket (listener); 307 closesocket (listener);
308 308
309#ifdef USE_SOCKETS_AS_HANDLES 309#if defined(USE_SOCKETS_AS_HANDLES) || PERL_VERSION_ATLEAST(5,18,0)
310 /* when select isn't winsocket, we also expect socket, connect, accept etc. 310 /* when select isn't winsocket, we also expect socket, connect, accept etc.
311 * to work on fds */ 311 * to work on fds */
312 filedes [0] = sock [0]; 312 filedes [0] = sock [0];
313 filedes [1] = sock [1]; 313 filedes [1] = sock [1];
314#else 314#else
357 || fcntl (fd, F_SETFD, FD_CLOEXEC); 357 || fcntl (fd, F_SETFD, FD_CLOEXEC);
358} 358}
359 359
360#endif 360#endif
361 361
362#if HAVE_EVENTFD
363# include <sys/eventfd.h>
364#else
362#if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7)) 365# if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))
363# define SCHMORP_H_HAVE_EVENTFD 1 366# define SCHMORP_H_HAVE_EVENTFD 1
364/* our minimum requirement is glibc 2.7 which has the stub, but not the header */ 367/* our minimum requirement is glibc 2.7 which has the stub, but not the header */
365# include <stdint.h> 368# include <stdint.h>
366# ifdef __cplusplus 369# ifdef __cplusplus
367extern "C" { 370extern "C" {
368# endif 371# endif
369 int eventfd (unsigned int initval, int flags); 372 int eventfd (unsigned int initval, int flags);
370# ifdef __cplusplus 373# ifdef __cplusplus
371} 374}
372# endif 375# endif
373#else 376# else
374# define eventfd(initval,flags) -1 377# define eventfd(initval,flags) -1
378# endif
375#endif 379#endif
376 380
377typedef struct { 381typedef struct {
378 int fd[2]; /* read, write fd, might be equal */ 382 int fd[2]; /* read, write fd, might be equal */
379 int len; /* write length (1 pipe/socket, 8 eventfd) */ 383 int len; /* write length (1 pipe/socket, 8 eventfd) */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines