Der SO_RCVTIMEO
Option erwartet ein struct timeval
definiert in sys/time.h
, keine Ganzzahl, wie Sie sie übergeben. Die timeval struct
hat als Feld für Sekunden und ein Feld für Mikrosekunden. Um das Timeout auf 100 ms einzustellen, sollte Folgendes funktionieren:
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 100000;
if (setsockopt(rcv_sock, SOL_SOCKET, SO_RCVTIMEO,&tv,sizeof(tv)) < 0) {
perror("Error");
}
Ich habe das gleiche Problem. Ich habe versucht, die von Ihnen vorgeschlagene Lösung mit dem timeval
zu übernehmen Struktur. Aber es schien nicht zu funktionieren.
Ich habe die Microsoft-Dokumentation gelesen und die Zeit sollte DWORD
sein mit der Anzahl der Millisekunden, aber es gibt noch etwas anderes zu tun, wenn der Socket mit dem WSASocket
erstellt wird Funktion, dann dwFlags
Parameter muss den WSA_FLAG_OVERLAPPED
haben Attribut gesetzt, damit die Zeitüberschreitung richtig funktioniert. Andernfalls wird die Zeitüberschreitung nie wirksam.