Module: kamailio Branch: master Commit: 8406a6c450a1fbdb4dc1e05acb6d3443bebf8339 URL: https://github.com/kamailio/kamailio/commit/8406a6c450a1fbdb4dc1e05acb6d3443...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2016-12-04T22:07:56+01:00
jsonrpc: increase the size of send buffer for datagram transport
---
Modified: modules/jsonrpc-s/jsonrpcs_sock.c
---
Diff: https://github.com/kamailio/kamailio/commit/8406a6c450a1fbdb4dc1e05acb6d3443... Patch: https://github.com/kamailio/kamailio/commit/8406a6c450a1fbdb4dc1e05acb6d3443...
---
diff --git a/modules/jsonrpc-s/jsonrpcs_sock.c b/modules/jsonrpc-s/jsonrpcs_sock.c index 7d62490..b4306e0 100644 --- a/modules/jsonrpc-s/jsonrpcs_sock.c +++ b/modules/jsonrpc-s/jsonrpcs_sock.c @@ -315,6 +315,7 @@ int jsonrpc_dgram_init_server(jsonrpc_dgram_sockaddr_t *addr, { char *socket_name; int flags; + int optval;
/* create sockets for rx and tx ... */ jsonrpc_dgram_socket_domain = socket_domain; @@ -376,6 +377,15 @@ int jsonrpc_dgram_init_server(jsonrpc_dgram_sockaddr_t *addr, } jsonrpc_dgram_create_reply_socket(socks->tx_sock, socket_domain, err_both);
+ optval = 64 * 1024; + if (setsockopt(socks->tx_sock, SOL_SOCKET, SO_SNDBUF, + (void*)&optval, sizeof(optval)) ==-1){ + LM_ERR("failed to increse send buffer size via setsockopt " + " SO_SNDBUF (%d) - %d: %s\n", optval, + errno, strerror(errno)); + /* continue, non-critical */ + } + return 0; err_both: close(socks->tx_sock); @@ -517,22 +527,19 @@ static int jsonrpc_dgram_send_data(int fd, char* buf, unsigned int len, const struct sockaddr* to, int tolen, int timeout) { int n; - size_t total_len; - total_len = strlen(buf); + unsigned int optlen = sizeof(int); + int optval;
- if(total_len == 0 || tolen ==0) + if(len == 0 || tolen ==0) return -1;
- if (total_len>JSONRPC_DGRAM_BUF_SIZE) { - LM_DBG("datagram too big, trunking, datagram_size is %i\n", - JSONRPC_DGRAM_BUF_SIZE); - len = JSONRPC_DGRAM_BUF_SIZE; - } /*LM_DBG("destination address length is %i\n", tolen);*/ n=sendto(fd, buf, len, 0, to, tolen); if(n!=len) { - LM_ERR("failed to send the response (%d - %d - %s)\n", - n, errno, strerror(errno)); + getsockopt(fd, SOL_SOCKET, SO_SNDBUF, (int*)&optval, &optlen); + LM_ERR("failed to send the response - ret: %d, len: %d (%d)," + " err: %d - %s)\n", + n, len, optval, errno, strerror(errno)); return n; } LM_DBG("rpc response sent out\n");