Ich habe einige Probleme die Arbeits von Sockets in Linux zu verstehen.Wie ist es möglich, Send-Timeout auf einem nicht blockierenden Socket zu haben?
setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(int));
write = write(sockfd, buf, len);
In dem obigen Code als Schreibvorgänge gepuffert werden, Timeout senden macht keinen Sinn (Schreibsystemaufruf sofort zurückkehren wird, wenn die User-Space-Puffer in den Kernel-Puffer kopiert wird). Sende-Puffer-Größe ist viel wichtiger Parameter, aber Sende-Timeout scheint es tut nichts wert. Aber ich bin sicher falsch, da ich ziemlich viel Code gesehen habe, der SO_SNDTIMEO verwendet. Wie kann der Zeitcode für die Benutzerraumcodierung mithilfe von SO_SNDTIMEO unter der Annahme, dass der Empfänger sehr langsam ist, überschritten werden?
Können Sie klären, was Ergebnis, das Sie erreichen wollen? –
Es gibt kein Ergebnis, das ich zu erreichen versuche, ich habe diese Frage gestellt, um die Funktionsweise von Sockets zu verstehen und warum gibt es SO_SNDTIMEO überhaupt? – 0xhacker
Diese Antwort könnte helfen zu verstehen, SO_SNDTIMEO: http://stackoverflow.com/a/4182564/10682 –