send() - zeitaufwand?



  • Hallo

    Kann mir jemand sagen wie lange so ein "send()" befehl (socket) braucht um ca. 512 bytes zu übertragen? Hängt das davon ab wo sich die andere IP befindet (Kanada, USA, Europa oder direkt neben an) ?

    Ich schreibe gerade ein Chatserver und muss das irgendwie Optimal einsetzen (vielleicht auch in verbindung mit fork()...)
    Aber will vorher noch ein paar Hintergrundsachen gewusst haben... vielleicht geht es ja auch schneller und ich brauch kein fork einbauen (ist ja eine ziemlich kaotische sache wenn man nicht weiß wie man das richtig macht...*g*)

    Wie kann ich die Millisekunden herausfinden? Mit clock() von time.h hab ich das noch nicht ganz hinbekommen...



  • Den send() call musst du wohl selber messen. Unterschied zwischen Nebenzimmer und USA sollte eigentlich nicht sein. Mit gettimeofday() kriegst du die Zeit ziemlich genau.



  • Ja hab ein Testclient mal 5000x den selben satz senden und empfangen lassen, ging innerhalb von 1-2 sekunden. Aber die Programme laufen ja auf den selben PC.. ich glaub nicht das das unter realen bedinnungen auch so ist.
    Danke für die Time Funktionen 🙂



  • send setzt ja nur dein Datenpaket in irgendeine OS-interne Warteschlange, das dauert nicht lange. Das Zerhacken in Fragmente und Rüberschieben übers Netzinterface erledigt dann der Kernel im Hintergrund.
    Soweit ich weiß jedenfalls.



  • Aus der man page send(2)

    When the message does not fit into the send buffer of the
    socket, send normally blocks, unless the socket has been
    placed in non-blocking I/O mode. In non-blocking mode it
    would return EAGAIN in this case. The select(2) call may
    be used to determine when it is possible to send more
    data.

    man kann also nicht sagen wann send() bei einem blockierendem Socket zurückkehrt.

    mfg



  • Ich denke mal, dass es von der jeweiligen Implementierung abhängt. Windows macht ein send eventuell schneller/langsamer als Unix. Dann kommen noch Sachen wie Anzahl der Hopps (oder wie man das nennt), die jeweilige Hardware/Software usw. dazu.

    PS: Wenn du nur mit dem Loopback-Interface arbeitest, wird das Netz meiner Meinung nach nicht belastet. Das bleibt dann alles innerhalb des Betriebssystems. Zum Testen würde es ich auch unterschiedlichen Rechnern ausprobieren.


Anmelden zum Antworten