#include #include "winsock2.h" #include // Try to create a socket, bind to 127.0.0.1, and get the socket name. void createSocket() { // Create a SOCKET for listening for incoming connection requests SOCKET ListenSocket; ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ListenSocket == INVALID_SOCKET) { std::cout << "Error at socket(): " << WSAGetLastError() << std::endl; WSACleanup(); return; } // The sockaddr_in structure specifies the address family, // IP address, and port for the socket that is being bound. sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr("127.0.0.1"); service.sin_port = htons(0); //printf("b4 bind : %d.%d.%d.%d\n", service.sin_addr.S_un.S_un_b.s_b1, // service.sin_addr.S_un.S_un_b.s_b2, // service.sin_addr.S_un.S_un_b.s_b3, // service.sin_addr.S_un.S_un_b.s_b4); // Bind the socket. if (SOCKET_ERROR == bind( ListenSocket, (SOCKADDR*) &service, sizeof(service))) { printf("bind() failed.\n"); closesocket(ListenSocket); return; } //listen(ListenSocket, 5); int name_len; sockaddr outname; name_len = sizeof (struct sockaddr_in); memset(&outname, 0, name_len); getsockname(ListenSocket, &outname, &name_len); // Get the port number. struct sockaddr_in* get_port = (sockaddr_in*)&outname; int port = ntohs(get_port->sin_port); if (outname.sa_data[2] == 0 && 0 == outname.sa_data[3]&& 0 == outname.sa_data[3]&& 0 == outname.sa_data[3]) { std::cout << "Bound to wrong address." << std::endl; // Display the address. printf("Address %d.%d.%d.%d:%d\n", outname.sa_data[2], outname.sa_data[3], outname.sa_data[4], outname.sa_data[5], port); } closesocket(ListenSocket); return; } void main() { // Initialize Winsock WSADATA wsaData; if (NO_ERROR != WSAStartup(MAKEWORD(2,2), &wsaData)) { printf("Error at WSAStartup()\n"); } // Try to create a socket, bind to 127.0.0.1, and get the socket name. for (int i = 0; i < 100; ++i) { createSocket(); } // Cleanup Winsock WSACleanup(); }