lwip http server Verbindung schliessen nach Request

OP #4522544
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.

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