diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c index b84098efff64e8abf72f89fb3226e511cb748efe..4ede03d90261075fd9691675a0b67e97187b7656 100644 --- a/dap-sdk/net/core/dap_events_socket.c +++ b/dap-sdk/net/core/dap_events_socket.c @@ -748,7 +748,7 @@ void dap_events_socket_set_writable_unsafe( dap_events_socket_t *sc, bool a_is_r sc->ev.events = events; - if ((!sc->server && sc->worker) || (sc->worker && sc->server->type != DAP_SERVER_UDP)) + if (sc->worker && sc->type != DESCRIPTOR_TYPE_SOCKET_UDP) if ( epoll_ctl(sc->worker->epoll_fd, EPOLL_CTL_MOD, sc->socket, &sc->ev) ){ int l_errno = errno; char l_errbuf[128]; diff --git a/dap-sdk/net/core/dap_server.c b/dap-sdk/net/core/dap_server.c index e57d203d23c2fb8ff807f5210f25cb4beef2bb68..504f027fc748713ff8f81a681c3d8582f66d63ec 100644 --- a/dap-sdk/net/core/dap_server.c +++ b/dap-sdk/net/core/dap_server.c @@ -185,7 +185,7 @@ dap_server_t* dap_server_new(dap_events_t *a_events, const char * a_addr, uint16 l_server->es_listeners = dap_list_append(l_server->es_listeners, l_es); if (l_es) { - l_es->type = l_server->type == DAP_SERVER_TCP ? DESCRIPTOR_TYPE_SOCKET_LISTENING : DESCRIPTOR_TYPE_SOCKET; + l_es->type = l_server->type == DAP_SERVER_TCP ? DESCRIPTOR_TYPE_SOCKET_LISTENING : DESCRIPTOR_TYPE_SOCKET_UDP; #ifdef DAP_EVENTS_CAPS_EPOLL // Prepare for multi thread listening l_es->ev_base_flags = EPOLLET| EPOLLIN | EPOLLEXCLUSIVE; diff --git a/dap-sdk/net/core/dap_worker.c b/dap-sdk/net/core/dap_worker.c index f872bacc4a020c6ff95606249842b35863498239..affb8124102d7a35dfe74c9f126457b9c3ea7ec8 100644 --- a/dap-sdk/net/core/dap_worker.c +++ b/dap-sdk/net/core/dap_worker.c @@ -193,17 +193,20 @@ void *dap_worker_thread(void *arg) break; case DESCRIPTOR_TYPE_SOCKET: l_must_read_smth = true; - if (!l_cur->server || l_cur->server->type == DAP_SERVER_TCP) { - l_bytes_read = recv(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size), - sizeof(l_cur->buf_in) - l_cur->buf_in_size, 0); - } else if (l_cur->server && l_cur->server->type == DAP_SERVER_UDP) { - socklen_t l_size = sizeof(l_cur->remote_addr); - l_bytes_read = recvfrom(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size), - sizeof(l_cur->buf_in) - l_cur->buf_in_size, 0, - (struct sockaddr *)&l_cur->remote_addr, &l_size); - } + l_bytes_read = recv(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size), + sizeof(l_cur->buf_in) - l_cur->buf_in_size, 0); l_errno = errno; break; + case DESCRIPTOR_TYPE_SOCKET_UDP: { + l_must_read_smth = true; + socklen_t l_size = sizeof(l_cur->remote_addr); + l_bytes_read = recvfrom(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size), + sizeof(l_cur->buf_in) - l_cur->buf_in_size, 0, + (struct sockaddr *)&l_cur->remote_addr, &l_size); + + l_errno = errno; + } + break; case DESCRIPTOR_TYPE_SOCKET_LISTENING: // Accept connection if ( l_cur->callbacks.accept_callback){ @@ -311,14 +314,14 @@ void *dap_worker_thread(void *arg) int l_errno; switch (l_cur->type){ case DESCRIPTOR_TYPE_SOCKET: - if (!l_cur->server || l_cur->server->type == DAP_SERVER_TCP) { - l_bytes_sent = send(l_cur->socket, (const char *)l_cur->buf_out, - l_cur->buf_out_size, MSG_DONTWAIT | MSG_NOSIGNAL); - } else if (l_cur->server && l_cur->server->type == DAP_SERVER_UDP) { - l_bytes_sent = sendto(l_cur->socket, (const char *)l_cur->buf_out, - l_cur->buf_out_size, MSG_DONTWAIT | MSG_NOSIGNAL, - (struct sockaddr *)&l_cur->remote_addr, sizeof(l_cur->remote_addr)); - } + l_bytes_sent = send(l_cur->socket, (const char *)l_cur->buf_out, + l_cur->buf_out_size, MSG_DONTWAIT | MSG_NOSIGNAL); + l_errno = errno; + break; + case DESCRIPTOR_TYPE_SOCKET_UDP: + l_bytes_sent = sendto(l_cur->socket, (const char *)l_cur->buf_out, + l_cur->buf_out_size, MSG_DONTWAIT | MSG_NOSIGNAL, + (struct sockaddr *)&l_cur->remote_addr, sizeof(l_cur->remote_addr)); l_errno = errno; break; case DESCRIPTOR_TYPE_PIPE: diff --git a/dap-sdk/net/core/include/dap_events_socket.h b/dap-sdk/net/core/include/dap_events_socket.h index bfbde1ad1da33103641ef3c404fc3f559e14d476..474c26ad4ced342b3971f73dfb8d6a111fe74c40 100644 --- a/dap-sdk/net/core/include/dap_events_socket.h +++ b/dap-sdk/net/core/include/dap_events_socket.h @@ -111,6 +111,7 @@ typedef struct dap_events_socket_callbacks { typedef enum { DESCRIPTOR_TYPE_SOCKET = 0, + DESCRIPTOR_TYPE_SOCKET_UDP, DESCRIPTOR_TYPE_SOCKET_LISTENING, DESCRIPTOR_TYPE_QUEUE, DESCRIPTOR_TYPE_PIPE,