(void) talloc_get_type_abort(nr, fr_network_t);
(void) talloc_get_type_abort_const(li, fr_listen_t);
- s = fr_rb_find(nr->sockets, &(fr_network_socket_t){ .listen = parent });
+ s = fr_rb_find(nr->sockets, &(fr_network_socket_t){ .listen = li });
if (!s) return -1;
cd = (fr_channel_data_t *) fr_message_alloc(s->ms, NULL, buflen);
if (!cd) return -1;
+ cd->listen = parent;
cd->request.is_dup = false;
cd->priority = PRIORITY_NORMAL;
cd->packet_ctx = packet_ctx;
memcpy(cd->m.data, buffer, buflen);
cd->m.when = fr_time();
- return fr_network_send_request(nr, cd);
+ if (fr_network_send_request(nr, cd) < 0) {
+ talloc_free(cd->packet_ctx);
+ fr_message_done(&cd->m);
+ nr->stats.dropped++;
+ s->stats.dropped++;
+ return -1;
+ }
+
+ s->outstanding ++;
+ return 0;
}