apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mladen Turk <mt...@apache.org>
Subject Re: poll/select process's IO on windows
Date Wed, 17 Jun 2009 10:17:43 GMT
Jack Andrews wrote:
 > hi,
 >
 > i want to detect IO on a child process stdio as well
 > as a socket from elsewhere.  ie. i want a select()
 > on /windows/.
 >
 > is it possible with APR?  or do i have to hack around?
 >

It's not possible with APR, however you can make a hack
if you know its stdin (or stdout, stderr) and you need to know
if there is a data pending.

#if APR_FILES_AS_SOCKETS
static apr_status_t get_file_event(apr_file_t *f, apr_pool_t *pool)
{
     apr_int32_t  nd;
     apr_pollfd_t wait_pollfd;

     wait_pollfd.p = pool;
     wait_pollfd.desc_type = APR_POLL_FILE;
     wait_pollfd.reqevents = APR_POLLIN;
     wait_pollfd.desc.f    = f;

     return apr_poll(&wait_pollfd, 1, &nd, 0);
}
#elif defined(WIN32)
static apr_status_t get_file_event(apr_file_t *f, apr_pool_t *pool)
{
     HANDLE h;
     char   c;
     DWORD  r;

     apr_os_file_get(&h, f);
     if (PeekNamedPipe(h, &c, 1, &r, NULL, NULL)) {
     	if (r == 1)
             APR_POLLOUT;
     }
     return APR_TIMEUP;
}
#endif

This will return APR_POLLOUT if there is data present to
be read, or APR_TIMEUP if not. customize at will ;)


Regards
-- 
^(TM)

Mime
View raw message