#include <yahttp/router.hpp>
struct connectionThreadData {
- WebServer* webServer;
- Socket* client;
+ WebServer* webServer{nullptr};
+ Socket* client{nullptr};
};
json11::Json HttpRequest::json()
// data and data->client will be freed by thread
connectionThreadData *data = new connectionThreadData;
data->webServer = this;
- data->client = d_server->accept();
- if (data->client->acl(acl)) {
- pthread_create(&tid, 0, &WebServerConnectionThreadStart, (void *)data);
- } else {
- ComboAddress remote;
- if (data->client->getRemote(remote))
- L<<Logger::Error<<"Webserver closing socket: remote ("<< remote.toString() <<") does not match 'webserver-allow-from'"<<endl;
- delete data->client; // close socket
+ try {
+ data->client = d_server->accept();
+ if (data->client->acl(acl)) {
+ pthread_create(&tid, 0, &WebServerConnectionThreadStart, (void *)data);
+ } else {
+ ComboAddress remote;
+ if (data->client->getRemote(remote))
+ L<<Logger::Error<<"Webserver closing socket: remote ("<< remote.toString() <<") does not match 'webserver-allow-from'"<<endl;
+ delete data->client; // close socket
+ delete data;
+ }
+ }
+ catch(PDNSException &e) {
+ L<<Logger::Error<<"PDNSException while accepting a connection in main webserver thread: "<<e.reason<<endl;
+ delete data->client;
+ delete data;
+ }
+ catch(std::exception &e) {
+ L<<Logger::Error<<"STL Exception while accepting a connection in main webserver thread: "<<e.what()<<endl;
+ delete data->client;
+ delete data;
+ }
+ catch(...) {
+ L<<Logger::Error<<"Unknown exception while accepting a connection in main webserver thread"<<endl;
+ delete data->client;
delete data;
}
}