recv-Funktion
Verfasst: Do Apr 24, 2014 10:54 am
Hallo,
meine TCP/IP Receivefunktion funktioniert nur im Debugmodus korrekt. Sprich wenn ich Einzelschritte ausführe, sieht select das Daten über den Socket anliegen, lass ich das Programm im execute durchlaufen, dann wartet select erst den Timeout ab und empfängt dann erst die Daten von recv. Bitte um Hilfe
meine TCP/IP Receivefunktion funktioniert nur im Debugmodus korrekt. Sprich wenn ich Einzelschritte ausführe, sieht select das Daten über den Socket anliegen, lass ich das Programm im execute durchlaufen, dann wartet select erst den Timeout ab und empfängt dann erst die Daten von recv. Bitte um Hilfe
Code: Alles auswählen
int Connection_recv(SOCKET sock, char* data_recv){
int size_recv;
char buffer[1024];
int loop_recv=0;
int c=0;
int retselect;
struct timeval time;
fd_set fd;
time.tv_sec = 5;
time.tv_usec = 0;
FD_ZERO(&fd);
FD_SET(sock,&fd);
printf("sock: %i\n",sock);
do{
retselect=select(sock, &fd, NULL, NULL, &time); // null dann timeout,
if(retselect <1)
printf("no answer until %d seconds\n",time.tv_sec);
else{
//printf("retselec: %d\n",retselect); //get answer =1
size_recv = recv(sock, buffer+loop_recv, sizeof(buffer), 0);
if(size_recv > 0){
memcpy(data_recv,buffer, loop_recv+size_recv);
loop_recv+=size_recv;
}
else if (size_recv == 0){
data_recv[loop_recv]= '\0';
return sock;
}
else{
printf("recv failed: %d\n", WSAGetLastError());
return 0;
}
}
}while(retselect > 0 );
printf("data_recv: %s\n",data_recv);
return sock;
}