void dynsockets_final(void) { if(hWinsock32) { _WSACleanup(); FreeLibrary( hWinsock32 ); hWinsock32 = 0; } _WSAStartup = 0; _WSACleanup = 0; _gethostname = 0; _inet_ntoa = 0; _gethostbyname = 0; _send = 0; _sendto = 0; _recv = 0; _recvfrom = 0; _listen = 0; _accept = 0; _socket = 0; _bind = 0; _WSAAsyncSelect = 0; _closesocket = 0; _getsockname = 0; _WSARecvFrom = 0; _WSAGetLastError = 0; _WSAConnect = 0; _setsockopt = 0; _WSAEventSelect = 0; _WSACreateEvent = 0; _WSACloseEvent = 0; _WSAResetEvent = 0; _WSAEnumNetworkEvents = 0; _shutdown = 0; _WSASend = 0; _WSARecv = 0; _inet_addr = 0; }
int main(int argc, char **argv) { int rc; /* parse arguments */ while ((rc = getopt(argc, argv, "csvumpU:h:b:P:q:l:")) != -1) { switch (rc) { case 'u': ud_test = 1; eps = MAX_EP_COUNT / 2; break; case 'm': multi_eps = 1; break; case 'c': server = 0; break; case 's': server = 1; break; case 'p': counters = 1; break; case 'h': remote_host = 1; strcpy(hostname, optarg); break; case 'b': buf_size = atoi(optarg); break; case 'U': ud_test = 1; eps = MIN(atoi(optarg), MAX_EP_COUNT); break; case 'P': strcpy(provider, optarg); break; case 'v': verbose = 1; break; case 'q': /* map UCM qpn into AF_INET6 sin6_flowinfo */ remote.sin6_family = AF_INET6; remote.sin6_flowinfo = htonl(strtol(optarg,NULL,0)); ucm = 1; server = 0; break; case 'l': /* map UCM lid into AF_INET6 sin6_port */ remote.sin6_family = AF_INET6; remote.sin6_port = htons(strtol(optarg,NULL,0)); ucm = 1; server = 0; break; default: print_usage(); exit(-12); } } #if defined(_WIN32) || defined(_WIN64) { WSADATA wsaData; int i; i = WSAStartup(MAKEWORD(2, 2), &wsaData); if (i != 0) { printf("%s WSAStartup(2.2) fail? (0x%x)\n", argv[0], i); fflush(stdout); exit(1); } } #endif /* for non UD tests, -h is always client */ if (remote_host && !ud_test) server = 0; if (!server) { printf("\nRunning as Client - %s %s %d endpoint(s)\n", provider, ud_test ? "UD test" : "", eps); } else { printf("\nRunning as Server - %s %s %d endpoint(s)\n", provider, ud_test ? "UD test" : "", eps); } /* * connect */ if (connect_ep(hostname)) { _WSACleanup(); exit(1); } if (ud_test) goto bail; if (do_immediate()) { _WSACleanup(); exit(1); } if (do_cmp_swap()) { _WSACleanup(); exit(1); } if (do_fetch_add()) { _WSACleanup(); exit(1); } bail: rc = disconnect_ep(); _WSACleanup(); if (!rc) printf("\n IB extension test - %s test PASSED\n\n", ud_test ? "UD" : "immed/atomic"); return rc; }