Nabend zusammen,
bin mal wieder etwas am leichten C programmieren und suche eine elegante Lösung für folgendes Problem:
Ich will eine kleine Netzwerkstatistik machen und zu diesem Zweck werte ich mit WinPcap bestimmte TCP Pakete aus. In manchen Paketen stehen eine ID und ein Beschreibungsstring, in anderen nur die ID.
Nun hab ich mir ein struct gebastelt, dass mehr oder weniger so aussieht
{
unsigned int id,
unsigned char beschreibung[50],
unsigned long long int in,
unsigned long long int out
}
Also, wenn ein Paket mit beiden Informationen ankommt, wird solch ein Variablentyp neu angelegt und in id und beschreibung die entsprechenden Werte geschrieben.
Jetzt hab ich davon sagen wir mal 1000 Stück im Speicher liegen und ein Paket kommt rein, das nur die ID bereithält und irgendwelche andern Daten. Nun muss ich den entsprechenden Eintrag raussuchen, der diese ID hat und dann die Paketlänge zu in oder out (je nachdem obs ein eingehendes oder ausgehendes Paket ist) hinzuaddieren.
Wie finde ich möglichst elegant diesen Eintrag? Bis jetzt hab ich halt ne Variable mit der Anzahl der Einträge und durchlaufe jedesmal eine forschleife von 0 bis zu dieser Anzahl und überprüfe ob beim gerade gewählten Eintrag die id übereinstimmt. Da es jedoch eine Menge Einträge sind und noch mehr Pakete pro Sekunde durch die Leitung flutschen (das Tool soll mal einen Hochleistungsfileserver überwachen) kostet das ja ne Menge Rechenleistung, nehme ich mal an.
Kann ich irgendwie anders auf die Einträge zugreifen, als mit einer fortlaufenden Nummer? bspw eintrag[id] wobei id dann eben die id des Pakets ist (möglich sind ids zwischen 0 und 65535, also einfach 65536 Einträge gleich zu erstellen fällt schon mal weg, ich würde gerne nur soviele wie nötig haben)?
Programmiert/Compiliert wird mit VC++ 6.0
bin mal wieder etwas am leichten C programmieren und suche eine elegante Lösung für folgendes Problem:
Ich will eine kleine Netzwerkstatistik machen und zu diesem Zweck werte ich mit WinPcap bestimmte TCP Pakete aus. In manchen Paketen stehen eine ID und ein Beschreibungsstring, in anderen nur die ID.
Nun hab ich mir ein struct gebastelt, dass mehr oder weniger so aussieht
{
unsigned int id,
unsigned char beschreibung[50],
unsigned long long int in,
unsigned long long int out
}
Also, wenn ein Paket mit beiden Informationen ankommt, wird solch ein Variablentyp neu angelegt und in id und beschreibung die entsprechenden Werte geschrieben.
Jetzt hab ich davon sagen wir mal 1000 Stück im Speicher liegen und ein Paket kommt rein, das nur die ID bereithält und irgendwelche andern Daten. Nun muss ich den entsprechenden Eintrag raussuchen, der diese ID hat und dann die Paketlänge zu in oder out (je nachdem obs ein eingehendes oder ausgehendes Paket ist) hinzuaddieren.
Wie finde ich möglichst elegant diesen Eintrag? Bis jetzt hab ich halt ne Variable mit der Anzahl der Einträge und durchlaufe jedesmal eine forschleife von 0 bis zu dieser Anzahl und überprüfe ob beim gerade gewählten Eintrag die id übereinstimmt. Da es jedoch eine Menge Einträge sind und noch mehr Pakete pro Sekunde durch die Leitung flutschen (das Tool soll mal einen Hochleistungsfileserver überwachen) kostet das ja ne Menge Rechenleistung, nehme ich mal an.
Kann ich irgendwie anders auf die Einträge zugreifen, als mit einer fortlaufenden Nummer? bspw eintrag[id] wobei id dann eben die id des Pakets ist (möglich sind ids zwischen 0 und 65535, also einfach 65536 Einträge gleich zu erstellen fällt schon mal weg, ich würde gerne nur soviele wie nötig haben)?
Programmiert/Compiliert wird mit VC++ 6.0