Fix create and close conn for UDP. Closes cesanta/dev#3162

PUBLISHED_FROM=071fb54d90750143751c1badc52757f0ba90bdb5
This commit is contained in:
Alexander Alashkin authored and rojer committed 2016-04-05 23:50:05 +01:00
1 parent 2c4ffcf70d
commit 5a02c9dbed
1 file changed
+18 -8
+18 -8
View File
@@ -2328,7 +2328,7 @@ int mg_resolve(const char *host, char *buf, size_t n) {
}
#endif /* MG_DISABLE_SYNC_RESOLVER */
MG_INTERNAL struct mg_connection *mg_create_connection(
MG_INTERNAL struct mg_connection *mg_create_connection_base(
struct mg_mgr *mgr, mg_event_handler_t callback,
struct mg_add_sock_opts opts) {
struct mg_connection *conn;
@@ -2346,13 +2346,22 @@ MG_INTERNAL struct mg_connection *mg_create_connection(
* doesn't compile with pedantic ansi flags.
*/
conn->recv_mbuf_limit = ~0;
if (!mg_if_create_conn(conn)) {
MG_FREE(conn);
conn = NULL;
MG_SET_PTRPTR(opts.error_string, "failed init connection");
}
} else {
MG_SET_PTRPTR(opts.error_string, "failed create connection");
MG_SET_PTRPTR(opts.error_string, "failed to create connection");
}
return conn;
}
MG_INTERNAL struct mg_connection *mg_create_connection(
struct mg_mgr *mgr, mg_event_handler_t callback,
struct mg_add_sock_opts opts) {
struct mg_connection *conn = mg_create_connection_base(mgr, callback, opts);
if (!mg_if_create_conn(conn)) {
MG_FREE(conn);
conn = NULL;
MG_SET_PTRPTR(opts.error_string, "failed to init connection");
}
return conn;
@@ -2694,7 +2703,8 @@ void mg_if_recv_udp_cb(struct mg_connection *nc, void *buf, int len,
if (nc == NULL) {
struct mg_add_sock_opts opts;
memset(&opts, 0, sizeof(opts));
nc = mg_create_connection(lc->mgr, lc->handler, opts);
/* Create fake connection w/out sock initialization */
nc = mg_create_connection_base(lc->mgr, lc->handler, opts);
if (nc != NULL) {
nc->sock = lc->sock;
nc->listener = lc;