#include <stdlib.h> #include <stdio.h> #include <windows.h> #define PORT 31337 int main(int argc, char **argv) { struct sockaddr_in s; DWORD (*init)(SOCKET fd); PCHAR dllPath, slash; SOCKET srv, cli; HMODULE lib; WSADATA data; WSAStartup(0x0202, &data); do { if (argc == 1) { printf("need dll path\n"); break; } if (!(dllPath = (PCHAR)malloc(strlen(argv[0]+5)))) { fprintf(stderr, "could not duplicate argv\n"); break; } printf("loading from %s\n", argv[1]); lib = LoadLibrary(argv[1]); if ((!lib) || (!((LPVOID)init = (LPVOID)GetProcAddress(lib, "Init")))) { fprintf(stderr, "could not load metsrv.dll, %lu\n", GetLastError()); break; } if ((srv = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { fprintf(stderr, "listen: %lu\n", GetLastError()); break; } s.sin_family = AF_INET; s.sin_port = htons(PORT); s.sin_addr.s_addr = INADDR_ANY; printf("Listening on port %d...\n", PORT); if (bind(srv, (struct sockaddr *)&s, sizeof(s)) < 0) { fprintf(stderr, "bind: %lu\n", GetLastError()); break; } if (listen(srv, 1) < 0) { fprintf(stderr, "listen: %lu\n", GetLastError()); break; } if ((cli = accept(srv, NULL, NULL)) < 0) { fprintf(stderr, "accept: %lu\n", GetLastError()); break; } printf("Initialized with client fd %lu.\n", cli); init(cli); } while (0); free(dllPath); return 0; }