mirror of
https://github.com/clearlinux/uwsgi.git
synced 2026-04-28 10:53:37 +00:00
74 lines
1.6 KiB
C
74 lines
1.6 KiB
C
#include "../../uwsgi.h"
|
|
|
|
extern struct uwsgi_server uwsgi;
|
|
|
|
ssize_t uwsgi_socket_logger(struct uwsgi_logger *ul, char *message, size_t len) {
|
|
|
|
int family = AF_UNIX;
|
|
|
|
if (!ul->configured) {
|
|
|
|
char *comma = strchr(ul->arg, ',');
|
|
if (comma) {
|
|
ul->data = comma+1;
|
|
*comma = 0;
|
|
}
|
|
|
|
char *colon = strchr(ul->arg, ':');
|
|
if (colon) {
|
|
family = AF_INET;
|
|
ul->addr_len = socket_to_in_addr(ul->arg, colon, 0, &ul->addr.sa_in);
|
|
}
|
|
else {
|
|
ul->addr_len = socket_to_un_addr(ul->arg, &ul->addr.sa_un);
|
|
}
|
|
|
|
ul->fd = socket(family, SOCK_DGRAM, 0);
|
|
if (ul->fd < 0) {
|
|
uwsgi_error_safe("socket()");
|
|
exit(1);
|
|
}
|
|
|
|
memset(&ul->msg, 0, sizeof(struct msghdr));
|
|
|
|
ul->msg.msg_name = &ul->addr;
|
|
ul->msg.msg_namelen = ul->addr_len;
|
|
if (ul->data) {
|
|
ul->msg.msg_iov = uwsgi_malloc(sizeof(struct iovec) * 2);
|
|
ul->msg.msg_iov[0].iov_base = ul->data;
|
|
ul->msg.msg_iov[0].iov_len = strlen(ul->data);
|
|
ul->msg.msg_iovlen = 2;
|
|
ul->count = 1;
|
|
}
|
|
else {
|
|
ul->msg.msg_iov = uwsgi_malloc(sizeof(struct iovec));
|
|
ul->msg.msg_iovlen = 1;
|
|
}
|
|
|
|
if (comma) {
|
|
*comma = ',' ;
|
|
}
|
|
|
|
ul->configured = 1;
|
|
}
|
|
|
|
|
|
ul->msg.msg_iov[ul->count].iov_base = message;
|
|
ul->msg.msg_iov[ul->count].iov_len = len;
|
|
|
|
return sendmsg(ul->fd, &ul->msg, 0);
|
|
|
|
}
|
|
|
|
void uwsgi_logsocket_register() {
|
|
uwsgi_register_logger("socket", uwsgi_socket_logger);
|
|
}
|
|
|
|
struct uwsgi_plugin logsocket_plugin = {
|
|
|
|
.name = "logsocket",
|
|
.on_load = uwsgi_logsocket_register,
|
|
|
|
};
|
|
|