lwip http server Verbindung schliessen nach Request

OP #4522544
Hi,

ich versuche gerade einen HttpServer mit lwip zu basteln.
Ich habe schon HttpRequest und HttpResponse wrapper Klassen geschrieben.

Ueber Chrome am PC bekomme ich auch das was ich im Response zusammen 
baue angezeigt. Jetzt ist aber mein Problem dass nachdem der Response 
geschickt wurde, die Verbindung geschlossen werden muss.
1
err_t HttpServer::sent(void *arg, struct tcp_pcb *tpcb, u16_t len) {
2
  return ERR_OK;
3
}
4

5
err_t HttpServer::poll(void *arg, struct tcp_pcb *pcb) {
6
  return ERR_OK;
7
}
8

9
err_t HttpServer::receive(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) {
10

11
  HttpRequest request(tpcb, p);
12
  HttpResponse response;
13

14
  switch(request.getRequestType()) {
15
  case HttpRequest::RequestType::GET:
16
    response = doGet(request);
17
    break;
18
  case HttpRequest::RequestType::POST:
19
    response = doPost(request);
20
    break;
21
  }
22

23
  std::string ret = response.getData();
24
  
25
  tcp_write(tpcb, ret.c_str(), ret.length(), TCP_WRITE_FLAG_COPY);
26
  return tcp_output(tpcb);
27

28
}

Wenn ich in der receive function schon ein 'tcp_close(...)' aufrufe 
bleibt mein Programm stehen.

Danach dachte ich ... vielleicht waere es im 'tcp_sent' callback besser. 
Leider passiert das gleiche.

Meine Frage waere jetzt, wann muss ich die Connection schliessen?
Weil wenn ich die connection nicht schliesse, dreht sich der "loading" 
spinner im Chrome Tab bis zum Timeout. Klar Http Connections werden 
normalerweise nach dem bearbeiten geschlossen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.