Can anyone tell me why I get Access Violation on:
SOCKET clientSocket = accept(server.m_listenSocket, (sockaddr*)&addr, &addrSize);
in MyThreadFunc?
Any suggestions how I can fix it?

Code:
#include "StdAfx.h"
#include ".\simpleserver.h"
#include <sstream>


SimpleServer::SimpleServer(void)
{
	m_startupEvent = CreateEvent(0, TRUE, FALSE, 0);
	WSAData data;
	WSAStartup(MAKEWORD(2,2), &data);
}

SimpleServer::~SimpleServer(void)
{
	WSACleanup();
}

SOCKET SimpleServer::CreateSocket()
{
	return socket(AF_INET, SOCK_STREAM, 0);
}

void SimpleServer::LoadListenSocket()
{
	m_listenSocket = CreateSocket();
	if (m_listenSocket == INVALID_SOCKET)
	{
		throw StartError("Failed to create listen socket");
	}

	sockaddr_in service;
	service.sin_family = AF_INET;
	service.sin_addr.s_addr = m_listenAddress.empty() ? htonl(INADDR_ANY) : inet_addr(m_listenAddress.c_str());
	service.sin_port = htons(m_listenPort);
	if (bind( m_listenSocket, (SOCKADDR*) &service, sizeof(service)) == SOCKET_ERROR) 
	{
		closesocket(m_listenSocket);
		stringstream errMsg;
		errMsg << "Failed to bin port " << m_listenPort << ", errorcode: " << GetLastError();
		throw StartError(errMsg.str().c_str());
	}

	if (listen( m_listenSocket, 5 ) == SOCKET_ERROR)
	{
		closesocket(m_listenSocket);
		stringstream errMsg;
		errMsg << "Failed to listen on port " << m_listenPort << ", errorcode: " << GetLastError();
		throw StartError(errMsg.str().c_str());		
	}
}

void SimpleServer::Start(int port, const string& specificAddress)
{
	m_listenPort = port;
	m_listenAddress = specificAddress;
	LoadListenSocket();

	DWORD threadId;
	CreateThread(NULL, 0, MyThreadFunc, this, 0, &threadId);
	WaitForSingleObject(m_startupEvent, 5000);
}

SimpleServerClient* SimpleServer::CreateClient()
{
	return new SimpleServerClient;
}

void SimpleServer::Shutdown()
{
	dtLock clientLock(m_critClients);
	list<SimpleServerClient*>::iterator it = m_clients.begin();
	for (; it != m_clients.end(); ++it)
	{
		(*it)->Disconnect();
		m_clients.erase(it);
		delete *it;
	}
}

DWORD SimpleServer::MyThreadFunc(void* ptr)
{
	SimpleServer& server = *(SimpleServer*)ptr;
	SetEvent(server.m_startupEvent);

	sockaddr_in addr;
	int addrSize = sizeof(sockaddr_in);
	while (true) 
	{
		SOCKET clientSocket = accept(server.m_listenSocket, (sockaddr*)&addr, &addrSize);
		if (clientSocket == INVALID_SOCKET)
		{
			cout << "Error " << WSAGetLastError() << " occurred." << endl;
			return 0;
		}
		cout << "Accepted a connection from " << inet_ntoa(addr.sin_addr) << endl;

		SimpleServerClient* clientPtr = server.CreateClient();
		clientPtr->AssignSocket(&server, clientSocket);
		clientPtr->OnConnect(inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
		clientPtr->ReadOperation();

		server.m_critClients.Lock();
		server.m_clients.push_back(clientPtr);
		server.m_critClients.Unlock();
	}
	return 0;
}


void SimpleServer::DeleteClient(SimpleServerClient* ptr)
{
	delete ptr;
}