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.