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); } }
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 */ }