Tengo un problema en mi bucle recv() para winsock. Estoy tratando de terminar el ciclo cuando iResult == 0, sin embargo, el ciclo solo finaliza cuando el socket se cierra. Parece estar colgando en el último recv() donde iResult equivaldría a 0. Entonces, ¿hay alguna idea sobre cómo terminar el ciclo de forma efectiva? Mi objetivo final (ya sea que iResult == 0 o no, tal vez estoy haciendo esto de la manera incorrecta) es detener el ciclo cuando se ha leído toda la información enviada. Aquí está el bucle.Finalizando el ciclo "recv()" cuando se lee toda la información usando Winsock
do
{
iResult = recv(socket, recvbuf, BUFLEN-1, 0);
if(iResult > 0){
// Null byte :)
// Remove that garbage >:(
recvbuf[iResult] = '\0';
printf("Recvbuf: %s\n\n\niResult: %d\n",recvbuf,iResult);
continue; // working properly
}
else if(iResult == 0)
// Connection closed properly
break;
else
{
printf("ERROR! %ld",WSAGetLastError());
break;
}
} while(iResult > 0);
Como dije, recibo todos los datos, simplemente no puedo salir del ciclo. El siguiente paso sería volver a escribir los datos en el servidor, pero se cuelga aquí hasta que se agote el tiempo de espera de ping. Socket es SOCK_STREAM y buflen se define como 0x200
Gracias
Quiero mantenerlo bloqueado para que pueda leer los datos, ¡pero su sugerencia de setsockopt() funcionó a la perfección! ¡Muchas gracias! – RageD
@Dennis M .: Gracias. Había eliminado la sugerencia de 'setsockopt' a favor de usar' ioctlsocket' en su lugar, pero cualquiera de ellos debería funcionar. He editado 'setsockopt' en la respuesta. –