setsockopt fehlschlägt, für IPPROTO_TCP IP_TOS in C

Mein code nicht funktioniert. Ich bin als root ausgeführt werden (Gleiches Verhalten wie normale Benutzer)

Zuerst möchte ich um die TOS und dann den Wert abrufen.

int tos_local = 0x28;
if (setsockopt(sockfd, IPPROTO_TCP, IP_TOS,  &tos_local, sizeof(tos_local))) {
    error("error at socket option");
} else {
    int tos=0;
    int toslen=0;

    if (getsockopt(sockfd, IPPROTO_TCP, IP_TOS,  &tos, &toslen) < 0) {
            error("error to get option");
    }else {
            printf ("changing tos opt = %d\n",tos);
    }
}

printf Drucke

ändern tos opt = 0

Ich würde erwarten, drucken 0x28 (40).

Was ist das problem?

Die richtige Antwort:

    if (setsockopt(sockfd, **IPPROTO_IP**, IP_TOS,  &tos_local, sizeof(tos_local))) {

    int tos=0;
    int toslen=sizeof(tos); //that line here

    if (getsockopt(sockfd, IPPROTO_IP, IP_TOS,  &tos, &toslen) < 0) {
Das 5. argument von getsockopt ist die Größe der Puffer auf den 4. arg. So löschen Sie das & in deinem Beispiel-code. Oder noch besser, setzen sizeof(tos) es gibt, wie Seth sagte.

InformationsquelleAutor cateof | 2011-05-26

Schreibe einen Kommentar