Module: kamailio
Branch: master
Commit: b57c83c936bf729bda3174803cacbf006552f2dc
URL: 
https://github.com/kamailio/kamailio/commit/b57c83c936bf729bda3174803cacbf006552f2dc

Author: Daniel-Constantin Mierla <mico...@gmail.com>
Committer: Daniel-Constantin Mierla <mico...@gmail.com>
Date: 2017-10-23T14:35:43+02:00

jsonrpcs: use select on udp socket to work on non-blocking mode

---

Modified: src/modules/jsonrpcs/jsonrpcs_sock.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/b57c83c936bf729bda3174803cacbf006552f2dc.diff
Patch: 
https://github.com/kamailio/kamailio/commit/b57c83c936bf729bda3174803cacbf006552f2dc.patch

---

diff --git a/src/modules/jsonrpcs/jsonrpcs_sock.c 
b/src/modules/jsonrpcs/jsonrpcs_sock.c
index 4dc4740e90..3529941f1d 100644
--- a/src/modules/jsonrpcs/jsonrpcs_sock.c
+++ b/src/modules/jsonrpcs/jsonrpcs_sock.c
@@ -30,6 +30,7 @@
 #include <fcntl.h>
 #include <sys/socket.h>
 #include <sys/un.h>
+#include <sys/select.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
@@ -560,16 +561,29 @@ void jsonrpc_dgram_server(int rx_sock)
        int ret;
        str scmd;
        jsonrpc_plain_reply_t* jr = NULL;
+       fd_set readfds;
+       int n;
 
        ret = 0;
 
        while(1) { /*read the datagram*/
                /* update the local config framework structures */
                cfg_update();
-
                memset(jsonrpc_dgram_buf, 0, JSONRPC_DGRAM_BUF_SIZE);
                jsonrpc_dgram_reply_addr_len = sizeof(jsonrpc_dgram_reply_addr);
 
+               FD_ZERO(&readfds);
+               FD_SET(rx_sock, &readfds);
+               n = select(rx_sock+1, &readfds, 0, 0, 0);
+               if(n < 0) {
+                       LM_ERR("failure in select: (%d) %s\n", errno, 
strerror(errno));
+                       continue;
+               }
+               if(!FD_ISSET(rx_sock, &readfds)) {
+                       /* no data on udp socket */
+                       continue;
+               }
+
                /* get the client's address */
                ret = recvfrom(rx_sock, jsonrpc_dgram_buf, 
JSONRPC_DGRAM_BUF_SIZE, 0,
                                (struct sockaddr*)&jsonrpc_dgram_reply_addr,


_______________________________________________
Kamailio (SER) - Development Mailing List
sr-dev@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to