All pastes #173696 Raw Edit

Something

public text v1 · immutable
·published 2006-09-17 05:30 UTC
rendered paste body
#pragma comment(lib, "ws2_32")
#include <windows.h>
#include <winsock.h>
#include <stdio.h>

typedef struct ClientPack{
	char *szIP;
	SOCKET sSocket;
}CLIENTPACK, *PCLIENTPACK;

DWORD WINAPI Handler(LPVOID lpParam);

int main(int argc, char **argv)
{
	int nPort = 0;
	printf("Enter listen port: ");
	scanf("%i", &nPort);
	MessageBeep(MB_ICONERROR);
	WSADATA wsaData;
	if(WSAStartup(MAKEWORD(2, 0), &wsaData) != 0){
		WSACleanup();
		printf("\n\n[1] Failed to Initialize winsock!\n\n");
		getchar();
		return -1;
	}
	printf("\n\n[1] Initiated Winsock...\n\n");

	SOCKET sListen = NULL;
	if((sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET){
		WSACleanup();
		printf("[2] Failed to create socket!\n\n");
		getchar();
		return -1;
	}

	SOCKADDR_IN SockInfo;
	SockInfo.sin_addr.s_addr = INADDR_ANY;
	SockInfo.sin_family = AF_INET;
	SockInfo.sin_port = htons(nPort);

	if(bind(sListen, (SOCKADDR*)&SockInfo, sizeof(SockInfo)) == SOCKET_ERROR){
		printf("[3] Failed to bind socket!\n\n");
		closesocket(sListen);
		WSACleanup();
		getchar();
		return -1;
	}
	printf("[3] Socket bound!\n\n");

	if(listen(sListen, SOMAXCONN) == SOCKET_ERROR){
		printf("[4] Failed to listen on given port!\n\n");
		closesocket(sListen);
		WSACleanup();
		getchar();
		return -1;
	}
	printf("[4] Now listening on port %d!\n\n", nPort);

	while(TRUE){
		Sleep(10);
		SOCKET sClient = NULL;
		sockaddr_in RemoteInfo;
		int nRemoteInfoSize = sizeof(RemoteInfo);
		if(sClient = accept(sListen, (sockaddr*)&RemoteInfo, &nRemoteInfoSize) != INVALID_SOCKET){
			printf("New Connection: %s\n", inet_ntoa(RemoteInfo.sin_addr));
			CLIENTPACK ClientPack;
			ClientPack.sSocket = sClient;
			ClientPack.szIP = inet_ntoa(RemoteInfo.sin_addr);
			CreateThread(0, NULL, (LPTHREAD_START_ROUTINE)&Handler, (void*)&ClientPack, NULL, NULL);
		}

	}



	return 0;
}

DWORD WINAPI Handler(LPVOID lpParam)
{
	PCLIENTPACK ClientPack = (PCLIENTPACK)lpParam;
	char *szRcvBuff = (char*)malloc(1024*1024);
	do{	
		recv(ClientPack->sSocket, szRcvBuff, strlen(szRcvBuff), 0);
	}while(strstr(szRcvBuff, "\r\n\r\n") == NULL);

	char szSend[] = "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\nContent-Length:10\r\n\r\n<html>\r\n<title>Arizona</title>\r\n\r\n</html>";
	send(ClientPack->sSocket, szSend, sizeof(szSend), 0);

	return 0;
}