#include #include #include HINSTANCE hInst; HWND hwndMain, hwndChanText, hwndUserList, hwndCmdLine; WSADATA *WsaData; int sock; LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); int MakeSocket(unsigned short int port, int *sock) { struct sockaddr_in name; int status; /* Create the socket. */ *sock = socket(PF_INET, SOCK_STREAM, 0); if (*sock < 0) return WSAGetLastError(); /* Give the socket a name. */ name.sin_family = AF_INET; name.sin_port = htons(port); name.sin_addr.s_addr = htonl(INADDR_ANY); status = 1; (void)setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, (char *) &status, sizeof(status)); if (bind (*sock, (struct sockaddr*)&name, sizeof(name)) < 0) goto error; return 0; error: closesocket(*sock); return WSAGetLastError(); } static void AcceptSock(void) { int new, size; struct sockaddr_in clientName; char tmp[85]; size = sizeof(clientName); new = accept(sock, (struct sockaddr*)&clientName, &size); if (new == INVALID_SOCKET) return; strcpy(tmp, "bitchx.dimension6.com:8888\n"); send(new, tmp, strlen(tmp), 0); } static int init(void) { static WSADATA WsaData; WNDCLASS wc; memset(&wc,0,sizeof(WNDCLASS)); wc.style = CS_HREDRAW|CS_VREDRAW |CS_DBLCLKS ; wc.lpfnWndProc = (WNDPROC)MainWndProc; wc.hInstance = hInst; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW); wc.lpszClassName = "metaserverClass"; wc.lpszMenuName = NULL; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); if (!RegisterClass(&wc)) return 0; hwndMain = CreateWindow( "metaserverClass", "metaserver", WS_MINIMIZEBOX|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_MAXIMIZEBOX|WS_CAPTION|WS_BORDER|WS_SYSMENU|WS_THICKFRAME, CW_USEDEFAULT,0,CW_USEDEFAULT,0, NULL, NULL, hInst, NULL); if (WSAStartup(0x0101, &WsaData)) { MessageBox(hwndMain, "Could not initialize WinSock", "Error", MB_OK | MB_ICONSTOP | MB_SETFOREGROUND); return 0; } if (MakeSocket(8875, &sock)) { MessageBox(hwndMain, "Could not create socket", "Error", MB_OK | MB_ICONSTOP | MB_SETFOREGROUND); return 0; } if (listen(sock, 1) == -1) { MessageBox(hwndMain, "Listen failed", "Error", MB_OK | MB_ICONSTOP | MB_SETFOREGROUND); close(sock); return 0; } WSAAsyncSelect(sock, hwndMain, WM_USER, FD_ACCEPT); return 1; } LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch (msg) { case WM_USER: AcceptSock(); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,msg,wParam,lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow) { MSG msg; HANDLE hAccelTable; hInst = hInstance; if (! init()) return 0; ShowWindow(hwndMain,SW_SHOW); while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } WSACleanup(); return msg.wParam; } .