//in global namespace: struct connection { SOCKET s_client; sockaddr_in saddr_client; }; connection tcon; //in main() //basically this is where the loop is and it accepts connections //it creates a new thread for each, but the socket and sockaddr_in //struct needs to be passed too... // s_client is a SOCKET, client is sockaddr_in (a struct) while(1) { s_client=accept(s_listen,(sockaddr *)&client,&sin_size); if (s_client != INVALID_SOCKET) { tcon.s_client = s_client; tcon.saddr_client = client; CreateThread(NULL,NULL,ConnectionThread,&tcon,NULL,NULL); } } // THREAD PROC: DWORD WINAPI ConnectionThread(LPVOID pcon) { connection con = *(connection*)pcon; AddLog("connection %s:%d",inet_ntoa(con.saddr_client.sin_addr),nPort); SendHeaders(con.s_client,"/"); char *szData="This is a test\n"; send(con.s_client ,szData,(int)strlen(szData),0); closesocket(con.s_client); return 0; }