WiP
This commit is contained in:
@@ -1038,6 +1038,12 @@ isc_socketmgr_renderjson(isc_socketmgr_t *mgr, json_object *stats);
|
||||
typedef isc_result_t
|
||||
(*isc_socketmgrcreatefunc_t)(isc_mem_t *mctx, isc_socketmgr_t **managerp);
|
||||
|
||||
typedef isc_result_t
|
||||
(*isc_socketevent_factory_t)(void* arg, isc_socketevent_t **ret);
|
||||
|
||||
isc_result_t
|
||||
isc_socket_udpsubscribe(isc_socket_t *sock, isc_socketevent_factory_t evf, void* arg);
|
||||
|
||||
ISC_LANG_ENDDECLS
|
||||
|
||||
#endif /* ISC_SOCKET_H */
|
||||
|
||||
+10
-5
@@ -3136,6 +3136,15 @@ internal_recv(isc__socket_t *sock) {
|
||||
|
||||
LOCK(&sock->lock);
|
||||
dev = sock->recv_event;
|
||||
if (dev == NULL && sock->recv_subscriber != NULL) {
|
||||
result = sock->recv_subscriber(sock->recv_subscriber_arg,
|
||||
&sock->recv_event);
|
||||
if (result == ISC_R_QUOTA) {
|
||||
// Unsubscribe
|
||||
sock->recv_subscriber = NULL;
|
||||
}
|
||||
}
|
||||
dev = sock->recv_event;
|
||||
if (dev == NULL) {
|
||||
goto finish;
|
||||
}
|
||||
@@ -3144,10 +3153,6 @@ internal_recv(isc__socket_t *sock) {
|
||||
isc_msgcat, ISC_MSGSET_SOCKET, ISC_MSG_INTERNALRECV,
|
||||
"internal_recv: event %p -> task %p", dev, dev->ev_sender);
|
||||
|
||||
/*
|
||||
* Try to do as much I/O as possible on this socket. There are no
|
||||
* limits here, currently.
|
||||
*/
|
||||
result = doio_recv(sock, dev);
|
||||
if (result == DOIO_EOF) {
|
||||
dev->result = ISC_R_EOF;
|
||||
@@ -3157,7 +3162,7 @@ internal_recv(isc__socket_t *sock) {
|
||||
}
|
||||
|
||||
finish:
|
||||
if (sock->recv_event == NULL) {
|
||||
if (sock->recv_event == NULL && sock->recv_subscriber == NULL) {
|
||||
unwatch_fd(&sock->manager->threads[sock->threadid], sock->fd,
|
||||
SELECT_POKE_READ);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user