No creo que estés usando el método adecuado. Es mejor que la comunicación sea síncrona y ten en cuenta que los paquetes se pueden unir o separar. No tengo ahora tiempo de realizar un ejemplo. Puedes, también, usar la API
TransmitFile
Te dejo un fragmento de código funcional para recibir ficheros por esta vía, previamente debes haber comunicado el tamaño del fichero y nombre a transferir (SizeFile y lpPathName):
Código PHP:
int Size = 1024*10;
BYTE *Buffer = (BYTE*)VirtualAlloc(0, Size, MEM_COMMIT, PAGE_READWRITE);
UINT Len = 0;
int nBytes = 0;
HANDLE hFile = CreateFile(lpPathName, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_FLAG_WRITE_THROUGH, 0);
if(hFile != INVALID_HANDLE_VALUE){
do {
Len = Recv(Sock, Buffer, Size, 0, 10000);
if(Len == -1) break;
_lwrite((int)hFile, Buffer, Len);
nBytes += Len;
} while (nBytes != FileSize)
CloseHandle(hFile);
}
VirtualFree(Buffer, 0, MEM_RELEASE);
Saludos.