UDP "address_len"



  • Guten Abend, ich habe nur eine kurze Frage,
    wozu wird der letzte Übergabeparameter als Pointerweiter gegeben?

    recvfrom(int socket, void *buffer, size_t length, int flags, struct sockaddr *address, socklen_t *address_len);

    Er wird ja als int übergeben und ist bei mir immer 16.
    Kann man davon ausgehen das er immer 16 beträgt bei jedem Client? Ich denke das es die Laenge von ipv4 darstellt, oder?

    So frage ich den Wert ab:

    int remoteAddrLen=sizeof(SOCKADDR_IN);
    

    Vielen Dank 🙂



  • mhh keiner eine Ahnung?
    xxx.xxx.xxx.xxx
    Inklusive den Punkten komme ich auf 15. Keiner eine Ahnung? 🙂



  • RTFM!

    http://www.bing.com/search?q=recvfrom+msdn&form=QBRE&filt=all

    http://msdn.microsoft.com/en-us/library/ms740120(VS.85).aspx
    ->
    __inout_opt int *fromlen

    ->
    fromlen [in, out, optional]
    An optional pointer to the size, in bytes, of the buffer pointed to by the from parameter.

    "Kann man davon ausgehen das er immer 16 beträgt bei jedem Client?"
    Welche Bedeutung hat das denn? Ist doch völlig egal...

    bb



  • unskilled schrieb:

    RTFM!

    http://www.bing.com/search?q=recvfrom+msdn&form=QBRE&filt=all

    http://msdn.microsoft.com/en-us/library/ms740120(VS.85).aspx
    ->
    __inout_opt int *fromlen

    ->
    fromlen [in, out, optional]
    An optional pointer to the size, in bytes, of the buffer pointed to by the from parameter.

    "Kann man davon ausgehen das er immer 16 beträgt bei jedem Client?"
    Welche Bedeutung hat das denn? Ist doch völlig egal...

    bb

    Naja, die erste Zeile deiner Antwort war nicht sehr nett und der Rest nicht brauchbar, habe ich bereits gelesen 😉

    Inwiefern das wichtig ist kann ich dir gerne erläutern und zwar müsste ich für jeden Client noch zusätzlich diese Adresslängen Informationen speichern, für den Fall das diese nicht immer einen Wert von 16 haben. Andernfalls bräuchte ich diese Informationen nicht im Speicher behalten. Und warum der letzte Parameter als Pointer übergeben wird ist auch imme noch nicht klar.



  • du kannst sie doch jedes mal neu "berechnen"...

    fromlen [in, out, optional]

    es ist also in und out parameter -> wie soll das by value gehen? also bleiben nur referenzen und pointer übrig.
    referenzen gibts in C nicht (winapi ist aber - wie fast alle systemapi`s - in C geschrieben - große Teile vermutlich auch in asm, aber das spielt hier keine rolle)
    außerdem sind die nicht null-able. aber das wird hier vermutlich auch gebraucht - kann ich nicht beurteilen, wie die fkt intern arbeitet...

    bb



  • mmarcel1 schrieb:

    mhh keiner eine Ahnung?
    xxx.xxx.xxx.xxx
    Inklusive den Punkten komme ich auf 15. Keiner eine Ahnung? 🙂

    Plus die terminierende Null... 16...

    Nein, im ernst, das ist Quatsch. Es geht um die Grösse der Struktur (sockaddr) die Du übergibst und da ist es korrekt, den Wert mit sizeof(..) abzufragen.

    Die Grösse wird unter anderem per Pointer übergeben, weil dieser Parameter optional ist (laut MSDN).

    Simon


Log in to reply