Win32 Socket Programming

A function I wrote to send data from a text file over the Internet.

VOID SendData()
{
	WSADATA wsaData;
	SOCKET MySocket = INVALID_SOCKET;
	struct addrinfo *result = NULL, *ptr = NULL, hints;
	CHAR szData[512];
	FILE *DataFile;
	INT DataSize;

	ZeroMemory(&hints, sizeof(hints));
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_protocol = IPPROTO_TCP;

	// Initiate connection to server
	if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
		return; // Error handle instead if you need it, same for code below.
		
	
	if (getaddrinfo(KGSERVER_HOST, KGSERVER_PORT, &hints, &result) != 0) {
		WSACleanup();
		return;
	}
	
	ptr=result;
	MySocket = socket(ptr->ai_family, 
			ptr->ai_socktype, 
			ptr->ai_protocol);

	if (MySocket == INVALID_SOCKET) {
		freeaddrinfo(result);
		WSACleanup();
		return;
	}
	
	if (connect(MySocket, 
		ptr->ai_addr, 
		(int)ptr->ai_addrlen) == SOCKET_ERROR) 
	{
		closesocket(MySocket);
		MySocket = INVALID_SOCKET;
		freeaddrinfo(result);
		WSACleanup();
		return;
	}
	
	// Prepare data
	if (fopen_s(&DataFile, "data.txt", "r") == 0) {
		DataSize = fread(szData, sizeof(char), sizeof(szData), DataFile);
		szData[DataSize] = '\0';
		fclose(DataFile);
	}
	
	// Attempt to send data
	if (send(MySocket, szData, sizeof(szData), 0) == SOCKET_ERROR)
		; // Send failed.
	
	closesocket(MySocket);
	MySocket = INVALID_SOCKET;
	freeaddrinfo(result);
	WSACleanup();
	return;
}


Requirements:
Link with ws2_32.lib and include:
winsock2.h
ws2tcpip.h

This document was last updated February 15th, 2011.
Written by: Dag Jonny Nedrelid
©2007-2012 http://thronic.com


Feel free to leave a comment.
Name:
URL:
0