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.

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)
     return APR_TIMEUP;

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


View raw message