EIO_Status CListeningSocket::Close(void) { if ( !m_Socket ) return eIO_Closed; EIO_Status status = m_IsOwned != eNoOwnership ? LSOCK_Close(m_Socket) : eIO_Success; m_Socket = 0; return status; }
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 */ }