コード例 #1
0
ファイル: testsock.c プロジェクト: TaoheGit/hmi_sdl_android
static void test_serv_by_name(abts_case *tc, void *data)
{
    apr_status_t rv;
    apr_sockaddr_t *sa;

    rv = apr_sockaddr_info_get(&sa, NULL, APR_UNSPEC, 0, 0, p);
    APR_ASSERT_SUCCESS(tc, "Problem generating sockaddr", rv);

    rv = apr_getservbyname(sa, "ftp");
    APR_ASSERT_SUCCESS(tc, "Problem getting ftp service", rv);
    ABTS_INT_EQUAL(tc, 21, sa->port);

    rv = apr_getservbyname(sa, "complete_and_utter_rubbish");
    APR_ASSERT_SUCCESS(tc, "Problem getting non-existent service", !rv);

    rv = apr_getservbyname(sa, "telnet");
    APR_ASSERT_SUCCESS(tc, "Problem getting telnet service", rv);
    ABTS_INT_EQUAL(tc, 23, sa->port);
}
コード例 #2
0
/**
 * Connect to the remote host
 */
static apr_status_t tcp_proxy_do_tcp_connect(request_rec * r,
                                             TcpProxyData * tpd,
                                             apr_pool_t * mp)
{
    apr_sockaddr_t *sa;
    apr_socket_t *s;
    apr_status_t rv;

    APACHELOG(APLOG_DEBUG, r,
              "tcp_proxy_do_tcp_connect: connect to host %s port %s",
              tpd->host, tpd->port);

    int port = atoi(tpd->port);
    rv = apr_sockaddr_info_get(&sa, tpd->host, APR_INET, port, 0, mp);
    if (rv != APR_SUCCESS) {
        return rv;
    }

    if (!port) {
        rv = apr_getservbyname(sa, tpd->port);
        if (rv != APR_SUCCESS) {
            return rv;
        }
    }

    rv = apr_socket_create(&s, sa->family, SOCK_STREAM, APR_PROTO_TCP, mp);
    if (rv != APR_SUCCESS) {
        return rv;
    }

    /* it is a good idea to specify socket options explicitly.
     * in this case, we make a blocking socket with timeout. */
    apr_socket_opt_set(s, APR_SO_NONBLOCK, 0);
    apr_socket_opt_set(s, APR_SO_KEEPALIVE, 1);
    if (tpd->timeout)
        apr_socket_timeout_set(s,
                               ((apr_interval_time_t) tpd->timeout) *
                               APR_USEC_PER_SEC);

    rv = apr_socket_connect(s, sa);
    if (rv != APR_SUCCESS) {
        return rv;
    }

    /* see the tutorial about the reason why we have to specify options again */
    apr_socket_opt_set(s, APR_SO_NONBLOCK, 0);
    apr_socket_opt_set(s, APR_SO_KEEPALIVE, 1);
    if (tpd->timeout)
        apr_socket_timeout_set(s,
                               ((apr_interval_time_t) tpd->timeout) *
                               APR_USEC_PER_SEC);

    tpd->tcpsocket = s;
    return APR_SUCCESS;
}