lwip: Unterschied der APIs

OP #6140326
Lesenswert?

Hallo Zusammen.

Ich bin dabei einen HTTP Server auf dem ESP aufzusetzen. Nur leider 
verstehe ich die Unterschiede der jeweiligen APIs nicht. Folgende 
Bibliothek verwende ich: lwip

Es gibt dazu mehrere APIs für die Implementierung:

https://www.nongnu.org/lwip/2_1_x/group__api.html

1. raw API
2. Sequential-style API
3. Socket API

Die raw API wird meiner Meinung nach verwendet, wenn kein Betriebssystem 
verwendet werden kann (Aufrufen durch Events).

Wie sieht's mit den anderen beiden aus? Will mir da jemand kurz den 
Unterschied erklären.

Danke ;)
Gast #6140357
Lesenswert?

Alexander M. schrieb:

> https://www.nongnu.org/lwip/2_1_x/group__api.html
>
> 1. raw API
> 2. Sequential-style API
> 3. Socket API
>
> Die raw API wird meiner Meinung nach verwendet, wenn kein Betriebssystem
> verwendet werden kann (Aufrufen durch Events).
>
> Wie sieht's mit den anderen beiden aus? Will mir da jemand kurz den
> Unterschied erklären.

Die einzige Aufgabe der von dir selbst verlinkten Doku ist: dir genau 
diese Unterschiede zu erklären.

Lesen und verstehen musst du das selbst. Da kann dir niemand bei helfen. 
Lernen ist immer eigene Anstrengung.
OP #6140413
Lesenswert?

Danke, die library habe ich mir schon mal angeschaut.
Ich benötige aber die Sockets so schon, weil ich noch ein paar weitere 
Server implementieren möchte..

Mir ist der grundlegende Gedanke aber zwischen der sequential und der 
socket API aber nicht ganz klar, stimmt das:
Verwendung der Socket API bei Netzwerkprogrammierung in Windows / Unix, 
Verwendung der sequential API bei embedded Devices? Ich kapiere es 
einfach nicht..

Grüße
#6140694
Lesenswert?

Alexander M. schrieb:
> 1. raw API
> 2. Sequential-style API
> 3. Socket API

Nummer 3 wird 1:1 genutzt, wie bei klassischen Berkeley-Sockets, wie man 
sie von anderen Systemen her kennt, hat aber einen großen Overhead.
Nummer 2 bietet im Prinzip die gleichen Funktionen, aber mit anderen 
Parametern. Die ist so ausgelegt, dass die Daten nicht alle jedes mal im 
Speicher umher kopiert werden müssen, braucht damit weniger Speicher und 
Laufzeit als Nummmer 3, aber die Benutzung ist immer noch sehr ähnlich.
Beide brauchen Multithreading.
Nummer 1 wird komplett anders verwendet, ist aber bei weitem am 
effizientesten und geht auch ohne Multithreading.

Nummer 3 setzt auf Nummer 2 auf, das wiederum auf Nummer 1 aufsetzt. 
Somit verhält sich dann auch die Codegröße entsprechend, da man nicht 
benötigte Interfaces komplett abschalten kann.
Gast #6140717
Lesenswert?

Man kann das "raw" Interface auch mit einem RTOS verwenden. Dann muss 
man sich aber selbst darum kümmern, die Daten zwischen dem Threads hin 
und her zu schicken, weil lwip dann keine Synchronisation mehr bietet. 
Das ist bei den anderen beiden APIs anders.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren