#include <windows.h>

extern void dispatcher_begin();
extern void dispatcher_end();

int main(int argc, char **argv)
{
	struct sockaddr_in s;
	int fd, on = 1, cfd;
	WSADATA d;

	WSAStartup(0x0202, &d);
	fd = socket(AF_INET, SOCK_STREAM, 0);

	s.sin_family      = AF_INET;
	s.sin_port        = htons(4444);
	s.sin_addr.s_addr = INADDR_ANY;

	setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&on, sizeof(on));
	bind(fd, (struct sockaddr *)&s, sizeof(s));
	listen(fd, 1);
	cfd = accept(fd, NULL, NULL);

	printf("Calling dispatcher...%d\n", cfd);

	_asm mov esi, [cfd];

	dispatcher_begin();

	return 0;
}
