Windows Socket Memoryproblem

dadevelopa

Mitglied
Hallo zusammen.
Ich habe ein kleines Programm geschrieben, welches unter Windows über einen Socket eine Nachricht versendet.
Das Problem ist nun, dass jedesmal, wenn die Funktion für das Senden aufgerufen wird, der vom Programm verwendete Speicher um 8 oder 12 KB steigt. Das ist so natürlich nicht akzeptabel.
Ich werde hier einmal den Code posten und ich hoffe, ihr könnt mir helfen.
Dies ist die Funktion, welche den Fehler zu verursachen scheint:
Code:
#include "stdafx.h"

#define NETWORK_ERROR -1
#define NETWORK_OK     0

void ReportError(int errorCode, const char *whichFunc);

char buffer[256];				//Buffer for the message
char errorMsg[92];				//Buffer for the errorMessage
WORD sockVersion;
WSADATA wsaData;
LPHOSTENT hostEntry;
SOCKET theSocket;
SOCKADDR_IN serverInfo;

int nret;

int connectToServer(void) {
	
	sockVersion = MAKEWORD(1, 1);
	// Initialize Winsock as before
	WSAStartup(sockVersion, &wsaData);
	
	hostEntry = gethostbyname("127.0.0.1");	// Specifying the server by its name;

	if (!hostEntry) {
		nret = WSAGetLastError();
		ReportError(nret, "gethostbyname()");	// Report the error
		WSACleanup();
		return NETWORK_ERROR;
	}

	//initialize the socket
	theSocket = socket(AF_INET,
			   SOCK_STREAM,
			   IPPROTO_TCP);
	
	
	
	if (theSocket == INVALID_SOCKET) {
		nret = WSAGetLastError();
		ReportError(nret, "socket()");

		WSACleanup();
		return NETWORK_ERROR;
	}

	serverInfo.sin_family = AF_INET;

	serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);

	serverInfo.sin_port = htons(13);

	// Connect to the server
	nret = connect(theSocket,
		       (LPSOCKADDR)&serverInfo,
		       sizeof(struct sockaddr));

	if (nret == SOCKET_ERROR) {
		nret = WSAGetLastError();
		ReportError(nret, "connect()");
		closesocket(theSocket);
		WSACleanup();
		return NETWORK_ERROR;
	}

	ZeroMemory(buffer, 256);
	wsprintf(buffer, "A Message");

	//Send data
	nret = send(theSocket,
		buffer,
		strlen(buffer),
	    0);
	
	if (nret == SOCKET_ERROR) {
		return NETWORK_ERROR;
	}

	
	// cleanup:
	int test = closesocket(theSocket);
	
	if(test != 0){
		ReportError(test, "closesocket()");
	}

	WSACleanup();
	
	return 0;
}

void ReportError(int errorCode, const char *whichFunc) {
   ZeroMemory(errorMsg, 92);			// Automatically NULL-terminate the string

   // The following line copies the phrase, whichFunc string, and integer errorCode into the buffer
   sprintf(errorMsg, "Call to %s returned error %d!", (char *)whichFunc, errorCode);

   MessageBox(NULL, errorMsg, "NetworkError", MB_OK);
}

Auf Port 13 läuft ein Server der die Nachrichten entgegennimmt und Ausgibt.

Vielen Dank, schon im voraus.
 
Rufst du bei jedem senden diese Methode auf ?
Das wäre unnötig, da du ja nicht jedes mal ein Socket initialisieren musst.
Vielleicht liegts ja daran.

Gruß,
Christian
 
Jop, und zwar aufgrund eines Timers, welcher beim erstellen des Fensters gesetzt wird.
Das seltsame ist nun, wenn ich den Timer auf ca 10 ms setze, entsteht kein Memory Leak.
Wie kann ich Speicher für einen Socket allozieren und wieder Freigeben? Weiss das jemand?
 
Zurück