diff options
author | mnicholson <mnicholson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-06-30 18:50:12 +0000 |
---|---|---|
committer | mnicholson <mnicholson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-06-30 18:50:12 +0000 |
commit | 9a335a2d2b7633aaf44776e2a85798783bc90e13 (patch) | |
tree | ac30d0428d16c8c78de563a4c545678f09217837 /main | |
parent | eb01fde579544c86b8bca1dafd2d7cc2e6bd8d65 (diff) |
Merged revisions 273270 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r273270 | mnicholson | 2010-06-30 13:48:21 -0500 (Wed, 30 Jun 2010) | 2 lines
Set TCP_NODELAY on manager TCP sockets to prevent delays on outgoing packets. This regression was introduced in r48338.
AST-359
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@273271 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r-- | main/manager.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/main/manager.c b/main/manager.c index 5bbeec0fc..8502268e7 100644 --- a/main/manager.c +++ b/main/manager.c @@ -3210,10 +3210,25 @@ static void *session_do(void *data) struct mansession s = {.session = NULL, }; int flags; int res; + struct protoent *p; if (session == NULL) goto done; + /* XXX here we set TCP_NODELAY on the socket to disable Nagle's + * algorithm. A better solution might be to buffer outgoing messages + * until they are complete then write them to the socket in one burst + * rather than sending them in bits and pieces. */ + p = getprotobyname("tcp"); + if (p) { + int arg = 1; + if( setsockopt(ser->fd, p->p_proto, TCP_NODELAY, (char *)&arg, sizeof(arg) ) < 0 ) { + ast_log(LOG_WARNING, "Failed to set manager tcp connection to TCP_NODELAY mode: %s\nSome manager actions may be slow to respond.\n", strerror(errno)); + } + } else { + ast_log(LOG_WARNING, "Failed to set manager tcp connection to TCP_NODELAY, getprotobyname(\"tcp\") failed\nSome manager actions may be slow to respond.\n"); + } + session->writetimeout = 100; session->waiting_thread = AST_PTHREADT_NULL; |