> I attach a sample program for an easy reproduction.

Sorry, I forgot it.

- INOUE Seiichiro <[EMAIL PROTECTED]>
  http://www.ariel-networks.com
#include <stdio.h>
#include <apr_general.h>
#include <apr_network_io.h>

int main(int argc, char **argv)
{
    apr_port_t listen_port = 12345;
    apr_status_t rv;
    apr_pool_t *mp;
    apr_socket_t *ns;
    apr_socket_t *s;
    apr_sockaddr_t *addr;
    apr_pollfd_t *fdset;
    apr_int16_t ev;
    apr_int32_t nsds;
        
    apr_initialize();

    rv = apr_pool_create(&mp, NULL);

    rv = apr_sockaddr_info_get(&addr, NULL, APR_UNSPEC, listen_port, 0, mp);
    if (rv != APR_SUCCESS) {
        goto error;
    }

    rv = apr_socket_create(&s, addr->sa.sin.sin_family, SOCK_STREAM, mp);
    if (rv != APR_SUCCESS) {
        goto error;
    }
    rv = apr_setsocketopt(s, APR_SO_REUSEADDR, 1);
    if (rv != APR_SUCCESS) {
        goto error;
    }
    
    rv = apr_bind(s, addr);
    if (rv != APR_SUCCESS) {
        goto error;
    }
    rv = apr_listen(s, 5);
    if (rv != APR_SUCCESS) {
        goto error;
    }

    rv = apr_poll_setup(&fdset, 1, mp);
    if (rv != APR_SUCCESS) {
        goto error;
    }
    rv = apr_poll_socket_add(fdset, s, APR_POLLIN|APR_POLLOUT);
    if (rv != APR_SUCCESS) {
        goto error;
    }

    /* poll for accepted socket for 10 seconds */
    rv = apr_poll(fdset, &nsds, APR_USEC_PER_SEC * 10);
    if (rv != APR_SUCCESS) {
        goto error;
    }
    rv = apr_poll_revents_get(&ev, s, fdset);
    if (rv != APR_SUCCESS) {
        goto error;
    }
    /* On Unix, it is readable */
    /* On Windows, it is error. WSAENOTCONN */
    printf("nsds = %d, ev = %x\n", nsds, ev);
    
    rv = apr_accept(&ns, s, mp);
    if (rv != APR_SUCCESS) {
        goto error;
    }
    printf("accepted\n");

    /* TODO do the work */
    
    apr_terminate();
    return 0;

 error:
    {
        char errbuf[256];
        apr_strerror(rv, errbuf, sizeof(errbuf));
        printf("error: %d, %s\n", rv, errbuf);
    }
    apr_terminate();
    return 1;
}

Reply via email to