Exemple #1
0
static void TEST__server(const char* sport)
{
    int            i;
    unsigned short nport;
    LSOCK          lsock;
    EIO_Status     status;

    /* Create listening socket */
    if (sscanf(sport, "%hu%n", &nport, &i) < 1  ||  sport[i]) {
        nport = 0;
        i = 0;
    }
    status = LSOCK_CreateEx(nport, N_RECONNECT * 10, &lsock, fSOCK_LogOn);
    if (status == eIO_Success  &&  !nport  &&  sport[i]) {
        FILE* fp;
        nport = LSOCK_GetPort(lsock, eNH_HostByteOrder);
        if (nport  &&  (fp = fopen(sport, "w")) != 0) {
            if (fprintf(fp, "%hu", nport) < 1  ||  fflush(fp) != 0)
                status = eIO_Unknown;
            fclose(fp);
        } else
            status = eIO_Unknown;
    }

    CORE_LOGF(eLOG_Note, ("TEST__server(port = %hu)", nport));
    assert(status == eIO_Success);

    /* Accept connections from clients and run test sessions */
    for (;;) {
        char full[80];
        char addr[80];
        char port[10];
        SOCK sock;

        status = LSOCK_Accept(lsock, NULL, &sock);
        assert(status == eIO_Success);

        assert(SOCK_GetPeerAddressString  (sock, full,sizeof(full)));
        assert(SOCK_GetPeerAddressStringEx(sock, addr,sizeof(addr),eSAF_IP));
        assert(SOCK_GetPeerAddressStringEx(sock, port,sizeof(port),eSAF_Port));
        assert(strcmp(full, strcat(strcat(addr, ":"), port)) == 0);

        /* Test the simplest randezvous(plain request-reply)
         * The two peer functions are:
         *      "TEST__[client|server]_1(SOCK sock)"
         */
        TEST__server_1(sock);

        status = LSOCK_Accept(lsock, NULL, &sock);
        assert(status == eIO_Success);

        /* Test a more complex case
         * The two peer functions are:
         *      "TEST__[client|server]_2(SOCK sock)"
         */
        TEST__server_2(sock, lsock);
    }
}
Exemple #2
0
static void TEST__server(unsigned short port)
{
    LSOCK      lsock;
    EIO_Status status;

    CORE_LOGF(eLOG_Note, ("TEST__server(port = %hu)", port));

    /* Create listening socket */
    status = LSOCK_CreateEx(port, N_RECONNECT * 10, &lsock, fSOCK_LogOn);
    assert(status == eIO_Success);

    /* Accept connections from clients and run test sessions */
    for (;;) {
        char full[80];
        char addr[80];
        char port[10];
        SOCK sock;

        status = LSOCK_Accept(lsock, NULL, &sock);
        assert(status == eIO_Success);

        assert(SOCK_GetPeerAddressString  (sock, full,sizeof(full)));
        assert(SOCK_GetPeerAddressStringEx(sock, addr,sizeof(addr),eSAF_IP));
        assert(SOCK_GetPeerAddressStringEx(sock, port,sizeof(port),eSAF_Port));
        assert(strcmp(full, strcat(strcat(addr, ":"), port)) == 0);

        /* Test the simplest randezvous(plain request-reply)
         * The two peer functions are:
         *      "TEST__[client|server]_1(SOCK sock)"
         */
        TEST__server_1(sock);

        status = LSOCK_Accept(lsock, NULL, &sock);
        assert(status == eIO_Success);

        /* Test a more complex case
         * The two peer functions are:
         *      "TEST__[client|server]_2(SOCK sock)"
         */
#ifdef DO_RECONNECT
        TEST__server_2(sock, lsock);
#else
        TEST__server_2(sock, 0);
#endif

#ifdef TEST_SRV1_ONCE
        /* Close listening socket */
        assert(LSOCK_Close(lsock) == eIO_Success);
        /* Finish after the first session */
        break;
#endif
    } /* for */
}