mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-18 15:49:56 +00:00
Set TCP_NODELAY on manager TCP sockets to prevent delays on outgoing packets. This regression was introduced in r48338.
AST-359 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@273270 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -4604,11 +4604,26 @@ static void *session_do(void *data)
|
|||||||
};
|
};
|
||||||
int flags;
|
int flags;
|
||||||
int res;
|
int res;
|
||||||
|
struct protoent *p;
|
||||||
|
|
||||||
if (session == NULL) {
|
if (session == NULL) {
|
||||||
goto done;
|
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");
|
||||||
|
}
|
||||||
|
|
||||||
flags = fcntl(ser->fd, F_GETFL);
|
flags = fcntl(ser->fd, F_GETFL);
|
||||||
if (!block_sockets) { /* make sure socket is non-blocking */
|
if (!block_sockets) { /* make sure socket is non-blocking */
|
||||||
flags |= O_NONBLOCK;
|
flags |= O_NONBLOCK;
|
||||||
|
|||||||
Reference in New Issue
Block a user