Forum: Mikrocontroller und Digitale Elektronik lwip http server Verbindung schliessen nach Request


von Pascal H. (_pascal_)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.