int ReadSockData( SOCKET sd_in, char **PtrToData ) { char *TempPtr; char *Buffer; char *BufferInit; int i = 0; int j = 0; int Total_Len = DMA_CHUNK_SIZE; Buffer = malloc( DMA_CHUNK_SIZE ); ErrorAsserter( 200, (Buffer == NULL), "Unable to Allocate memory" ); i = 0; BufferInit = Buffer; while ( recv( sd_in, Buffer, 1, 0) >= 1 ) { if ( i < DMA_CHUNK_SIZE ) { i++; printf ("%c", *Buffer ); Buffer++; } else { i = 0; Total_Len += DMA_CHUNK_SIZE; printf ("\n\n New Chunk Total Len: %d \n\n", Total_Len ); TempPtr = malloc( Total_Len ); ErrorAsserter( 800, (TempPtr == NULL), "Unable to allocate memory" ); memcpy( TempPtr, BufferInit, Total_Len ); Buffer = BufferInit; free( Buffer ); Buffer = (TempPtr + Total_Len - DMA_CHUNK_SIZE); BufferInit = TempPtr; } } #ifdef __DEBUG__ printf ("\nReceive complete.\a\n"); #endif /* Buffer[Total_Len + i] = '\0'; */ j = ( Total_Len + i ) % DMA_CHUNK_SIZE; if(0 != j) { Total_Len = Total_Len - DMA_CHUNK_SIZE + i; } *PtrToData = malloc( Total_Len ); ErrorAsserter( 201, (*PtrToData == NULL), "Unable to Allocate memory" ); strncpy( *PtrToData, BufferInit, Total_Len ); *PtrToData[Total_Len] = '\0'; free ( BufferInit ); /* This was the problem*/ #ifdef __DEBUG_ENABLED__ printf ( "\nReceived:\n%s", *PtrToData ); #endif }