UDP-Socket-Set-Timeout

UDP-Socket-Set-Timeout

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.