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)

Reply via email to