MEDIUM: log: replace sendto() with sendmsg() in __send_log()
This patch replaces sendto() with sendmsg() in __send_log() and makes use of an iovec to send the log message.
This commit is contained in:
parent
834cb2e445
commit
609ac2ab6c
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
#define NB_LOG_FACILITIES 24
|
#define NB_LOG_FACILITIES 24
|
||||||
#define NB_LOG_LEVELS 8
|
#define NB_LOG_LEVELS 8
|
||||||
|
#define NB_MSG_IOVEC_ELEMENTS 1
|
||||||
#define SYSLOG_PORT 514
|
#define SYSLOG_PORT 514
|
||||||
#define UNIQUEID_LEN 128
|
#define UNIQUEID_LEN 128
|
||||||
|
|
||||||
|
|
17
src/log.c
17
src/log.c
|
@ -807,6 +807,11 @@ void send_log(struct proxy *p, int level, const char *format, ...)
|
||||||
*/
|
*/
|
||||||
void __send_log(struct proxy *p, int level, char *message, size_t size)
|
void __send_log(struct proxy *p, int level, char *message, size_t size)
|
||||||
{
|
{
|
||||||
|
static struct iovec iovec[NB_MSG_IOVEC_ELEMENTS] = { };
|
||||||
|
static struct msghdr msghdr = {
|
||||||
|
.msg_iov = iovec,
|
||||||
|
.msg_iovlen = NB_MSG_IOVEC_ELEMENTS
|
||||||
|
};
|
||||||
static int logfdunix = -1; /* syslog to AF_UNIX socket */
|
static int logfdunix = -1; /* syslog to AF_UNIX socket */
|
||||||
static int logfdinet = -1; /* syslog to AF_INET socket */
|
static int logfdinet = -1; /* syslog to AF_INET socket */
|
||||||
static char *dataptr = NULL;
|
static char *dataptr = NULL;
|
||||||
|
@ -889,14 +894,18 @@ void __send_log(struct proxy *p, int level, char *message, size_t size)
|
||||||
backup = log_ptr[max - 1];
|
backup = log_ptr[max - 1];
|
||||||
log_ptr[max - 1] = '\n';
|
log_ptr[max - 1] = '\n';
|
||||||
|
|
||||||
sent = sendto(*plogfd, log_ptr, max,
|
iovec[0].iov_base = log_ptr;
|
||||||
MSG_DONTWAIT | MSG_NOSIGNAL,
|
iovec[0].iov_len = max;
|
||||||
(struct sockaddr *)&logsrv->addr, get_addr_len(&logsrv->addr));
|
|
||||||
|
msghdr.msg_name = (struct sockaddr *)&logsrv->addr;
|
||||||
|
msghdr.msg_namelen = get_addr_len(&logsrv->addr);
|
||||||
|
|
||||||
|
sent = sendmsg(*plogfd, &msghdr, MSG_DONTWAIT | MSG_NOSIGNAL);
|
||||||
|
|
||||||
log_ptr[max - 1] = backup;
|
log_ptr[max - 1] = backup;
|
||||||
|
|
||||||
if (sent < 0) {
|
if (sent < 0) {
|
||||||
Alert("sendto logger #%d failed: %s (errno=%d)\n",
|
Alert("sendmsg logger #%d failed: %s (errno=%d)\n",
|
||||||
nblogger, strerror(errno), errno);
|
nblogger, strerror(errno), errno);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# This is a test configuration.
|
# This is a test configuration.
|
||||||
# Its purpose is simply to emit logs on the loopback in order to verify
|
# Its purpose is simply to emit logs on the loopback in order to verify
|
||||||
# that the time is correct. To be used with tcpdump on lo, or with
|
# that the time is correct. To be used with tcpdump on lo, or with
|
||||||
# "strace -s100 -esendto".
|
# "strace -s100 -esendmsg".
|
||||||
|
|
||||||
global
|
global
|
||||||
log 127.0.0.1:514 local0
|
log 127.0.0.1:514 local0
|
||||||
|
|
Loading…
Reference in New Issue