/* select.h Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Red Hat, Inc. This file is part of Cygwin. This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ /* Winsock select() types and macros */ /* * Use this struct to interface to * the system provided select. */ typedef struct winsock_fd_set { unsigned int fd_count; HANDLE fd_array[1024]; /* Dynamically allocated. */ } winsock_fd_set; /* * Define the Win32 winsock definitions to have a prefix WINSOCK_ * so we can be explicit when we are using them. */ #define WINSOCK_FD_ISSET(fd, set) __WSAFDIsSet ((SOCKET)fd, (fd_set *)set) #define WINSOCK_FD_SET(fd, set) do { \ (set)->fd_array[(set)->fd_count++]=fd;\ } while(0) #define WINSOCK_FD_ZERO(set) ((set)->fd_count = 0) #define WINSOCK_FD_CLR(fd, set) do { \ u_int __i; \ for (__i = 0; __i < (set)->fd_count ; __i++) { \ if ((set)->fd_array[__i] == fd) { \ while (__i < (set)->fd_count-1) { \ (set)->fd_array[__i] = \ (set)->fd_array[__i+1]; \ __i++; \ } \ (set)->fd_count--; \ break; \ } \ } \ } while(0) extern "C" int PASCAL __WSAFDIsSet(SOCKET, fd_set*); extern "C" int PASCAL win32_select(int, fd_set*, fd_set*, fd_set*, const struct timeval*); /* * call to winsock's select() - * type coercion need to appease confused prototypes */ #define WINSOCK_SELECT(nfd, rd, wr, ex, timeo) \ win32_select (nfd, (fd_set *) rd, (fd_set *) wr, (fd_set *) ex, timeo)