1 | /* |
1 | /* |
2 | * libev select fd activity backend |
2 | * libev select fd activity backend |
3 | * |
3 | * |
4 | * Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de> |
4 | * Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de> |
5 | * All rights reserved. |
5 | * All rights reserved. |
6 | * |
6 | * |
7 | * Redistribution and use in source and binary forms, with or without modifica- |
7 | * Redistribution and use in source and binary forms, with or without modifica- |
8 | * tion, are permitted provided that the following conditions are met: |
8 | * tion, are permitted provided that the following conditions are met: |
9 | * |
9 | * |
… | |
… | |
37 | * either the BSD or the GPL. |
37 | * either the BSD or the GPL. |
38 | */ |
38 | */ |
39 | |
39 | |
40 | #ifndef _WIN32 |
40 | #ifndef _WIN32 |
41 | /* for unix systems */ |
41 | /* for unix systems */ |
|
|
42 | # include <inttypes.h> |
|
|
43 | # ifndef __hpux |
|
|
44 | /* for REAL unix systems */ |
42 | # include <sys/select.h> |
45 | # include <sys/select.h> |
43 | # include <inttypes.h> |
46 | # endif |
44 | #endif |
47 | #endif |
45 | |
48 | |
46 | #ifndef EV_SELECT_USE_FD_SET |
49 | #ifndef EV_SELECT_USE_FD_SET |
47 | # ifdef NFDBITS |
50 | # ifdef NFDBITS |
48 | # define EV_SELECT_USE_FD_SET 0 |
51 | # define EV_SELECT_USE_FD_SET 0 |
… | |
… | |
139 | struct timeval tv; |
142 | struct timeval tv; |
140 | int res; |
143 | int res; |
141 | int fd_setsize; |
144 | int fd_setsize; |
142 | |
145 | |
143 | EV_RELEASE_CB; |
146 | EV_RELEASE_CB; |
144 | tv.tv_sec = (long)timeout; |
147 | EV_TV_SET (tv, timeout); |
145 | tv.tv_usec = (long)((timeout - (ev_tstamp)tv.tv_sec) * 1e6); |
|
|
146 | |
148 | |
147 | #if EV_SELECT_USE_FD_SET |
149 | #if EV_SELECT_USE_FD_SET |
148 | fd_setsize = sizeof (fd_set); |
150 | fd_setsize = sizeof (fd_set); |
149 | #else |
151 | #else |
150 | fd_setsize = vec_max * NFDBYTES; |
152 | fd_setsize = vec_max * NFDBYTES; |
… | |
… | |
182 | else |
184 | else |
183 | errno -= WSABASEERR; |
185 | errno -= WSABASEERR; |
184 | #endif |
186 | #endif |
185 | |
187 | |
186 | #ifdef _WIN32 |
188 | #ifdef _WIN32 |
187 | /* select on windows errornously returns EINVAL when no fd sets have been |
189 | /* select on windows erroneously returns EINVAL when no fd sets have been |
188 | * provided (this is documented). what microsoft doesn't tell you that this bug |
190 | * provided (this is documented). what microsoft doesn't tell you that this bug |
189 | * exists even when the fd sets _are_ provided, so we have to check for this bug |
191 | * exists even when the fd sets _are_ provided, so we have to check for this bug |
190 | * here and emulate by sleeping manually. |
192 | * here and emulate by sleeping manually. |
191 | * we also get EINVAL when the timeout is invalid, but we ignore this case here |
193 | * we also get EINVAL when the timeout is invalid, but we ignore this case here |
192 | * and assume that EINVAL always means: you have to wait manually. |
194 | * and assume that EINVAL always means: you have to wait manually. |