Ich habe ein paar Tipps, wie es geht, aber ich verstehe nicht, wie Sie Setsockopt verwenden. Ich habe eine unendliche While-Schleife mit recv anrufen, ich möchte Timeout und close(cli_socket)
, wenn Client nicht in 5 Sekunden etwas sendet.Einstellung Timeout für Socket recv TCP
Wenn Client sendet nur einen Teil der gesamten erwarteten Nachricht Ich möchte Timer zurücksetzen und geben Sie ihm weitere 5 Sekunden.
currentry Ich habe dies:
while((cut = buffer.find("\r\n")) == -1)
{
struct timeval tv;
tv.tv_sec = 5;
setsockopt(cli_socket, SOL_SOCKET, SO_RCVTIMEO,(struct timeval *)&tv,sizeof(struct timeval));
recv(cli_socket, tmpBuffer, 100, 0);
buffer += tmpBuffer;
memset(tmpBuffer, 0, 100);
}
Sie 'setsockopt' Anruf scheint in Ordnung zu mir, und es funktioniert für mich. Welches Verhalten siehst du und wie unterscheidet es sich von dem, was du erwartest? Ich bemerke, dass Sie den Rückgabewert von 'recv()' nicht überprüfen, und das lässt mich fragen, was Sie erwarten würden, wenn es abläuft. – Dolda2000
Ich möchte die Verbindung schließen, wenn es Timeouts – lllook