本文整理汇总了C++中MK_TRACE函数的典型用法代码示例。如果您正苦于以下问题:C++ MK_TRACE函数的具体用法?C++ MK_TRACE怎么用?C++ MK_TRACE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MK_TRACE函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mk_http_send_file
ssize_t mk_http_send_file(struct client_session *cs, struct session_request *sr)
{
ssize_t nbytes = 0;
nbytes = mk_socket_send_file(cs->socket, sr->fd_file,
&sr->bytes_offset, sr->bytes_to_send);
if (nbytes > 0) {
sr->bytes_to_send -= nbytes;
if (sr->bytes_offset == nbytes) {
mk_server_cork_flag(cs->socket, TCP_CORK_OFF);
}
}
/*
* In some circumstances when writing data, the connection can get broken.
* So, we must be aware of that.
*
* Also, if for some reason the file that is being served changes it's size
* we can get a zero bytes send as return value. We need to validate the
* return values <= zero
*/
if (mk_unlikely(nbytes <= 0)) {
if (errno != EAGAIN) {
MK_TRACE("sendfile() = %i", nbytes);
return EXIT_ABORT;
}
MK_TRACE("sendfile() = EAGAIN");
}
return sr->bytes_to_send;
}
示例2: mk_epoll_change_mode
int mk_epoll_change_mode(int efd, int fd, int mode, int behavior)
{
int ret;
struct epoll_event event = {0, {0}};
event.events = EPOLLERR | EPOLLHUP;
event.data.fd = fd;
if (behavior == MK_EPOLL_EDGE_TRIGGERED) {
event.events |= EPOLLET;
}
switch (mode) {
case MK_EPOLL_READ:
MK_TRACE("[FD %i] EPoll changing mode to READ", fd);
event.events |= EPOLLIN;
break;
case MK_EPOLL_WRITE:
MK_TRACE("[FD %i] EPoll changing mode to WRITE", fd);
event.events |= EPOLLOUT;
break;
case MK_EPOLL_RW:
MK_TRACE("[FD %i] Epoll changing mode to READ/WRITE", fd);
event.events |= EPOLLIN | EPOLLOUT;
break;
}
ret = epoll_ctl(efd, EPOLL_CTL_MOD, fd, &event);
if (ret < 0) {
perror("epoll_ctl");
}
return ret;
}
示例3: mk_conn_read
int mk_conn_read(int socket)
{
int ret;
struct client_session *cs;
struct sched_list_node *sched;
MK_TRACE("[FD %i] Connection Handler / read", socket);
/* Plugin hook */
ret = mk_plugin_event_read(socket);
switch(ret) {
case MK_PLUGIN_RET_EVENT_OWNED:
return MK_PLUGIN_RET_CONTINUE;
case MK_PLUGIN_RET_EVENT_CLOSE:
return -1;
case MK_PLUGIN_RET_EVENT_CONTINUE:
break; /* just return controller to invoker */
}
sched = mk_sched_get_thread_conf();
cs = mk_session_get(socket);
if (!cs) {
/* Note: Linux don't set TCP_NODELAY socket flag by default */
if (mk_socket_set_tcp_nodelay(socket) != 0) {
mk_warn("TCP_NODELAY failed");
}
/* Create session for the client */
MK_TRACE("[FD %i] Create session", socket);
cs = mk_session_create(socket, sched);
if (!cs) {
return -1;
}
}
/* Read incomming data */
ret = mk_handler_read(socket, cs);
if (ret > 0) {
if (mk_http_pending_request(cs) == 0) {
mk_epoll_change_mode(sched->epoll_fd,
socket, MK_EPOLL_WRITE, MK_EPOLL_LEVEL_TRIGGERED);
}
else if (cs->body_length + 1 >= config->max_request_size) {
/*
* Request is incomplete and our buffer is full,
* close connection
*/
mk_session_remove(socket);
return -1;
}
else {
MK_TRACE("[FD %i] waiting for pending data", socket);
}
}
return ret;
}
示例4: mk_utils_print_errno
int mk_utils_print_errno(int n)
{
switch(n) {
case EAGAIN:
MK_TRACE("EAGAIN");
return -1;
case EBADF:
MK_TRACE("EBADF");
return -1;
case EFAULT:
MK_TRACE("EFAULT");
return -1;
case EFBIG:
MK_TRACE("EFBIG");
return -1;
case EINTR:
MK_TRACE("EINTR");
return -1;
case EINVAL:
MK_TRACE("EINVAL");
return -1;
case EPIPE:
MK_TRACE("EPIPE");
return -1;
default:
MK_TRACE("DONT KNOW");
return 0;
}
return 0;
}
示例5: mk_sched_get_thread_conf
void *mk_epoll_init(int efd, mk_epoll_handlers * handler, int max_events)
{
int i, fd, ret = -1;
int num_fds;
int fds_timeout;
struct epoll_event *events;
struct sched_list_node *sched;
/* Get thread conf */
sched = mk_sched_get_thread_conf();
fds_timeout = log_current_utime + config->timeout;
events = mk_mem_malloc_z(max_events*sizeof(struct epoll_event));
while (1) {
ret = -1;
num_fds = epoll_wait(efd, events, max_events, MK_EPOLL_WAIT_TIMEOUT);
for (i = 0; i < num_fds; i++) {
fd = events[i].data.fd;
if (events[i].events & EPOLLIN) {
MK_TRACE("[FD %i] EPoll Event READ", fd);
ret = (*handler->read) (fd);
}
else if (events[i].events & EPOLLOUT) {
MK_TRACE("[FD %i] EPoll Event WRITE", fd);
ret = (*handler->write) (fd);
}
else if (events[i].events & (EPOLLHUP | EPOLLERR | EPOLLRDHUP)) {
MK_TRACE("[FD %i] EPoll Event EPOLLHUP/EPOLLER", fd);
ret = (*handler->error) (fd);
}
if (ret < 0) {
MK_TRACE("[FD %i] Epoll Event FORCE CLOSE | ret = %i", fd, ret);
(*handler->close) (fd);
}
}
/* Check timeouts and update next one */
if (log_current_utime >= fds_timeout) {
mk_sched_check_timeouts(sched);
fds_timeout = log_current_utime + config->timeout;
}
}
}
示例6: mk_socket_ip_str
int mk_socket_ip_str(int socket_fd, char **buf, int size, unsigned long *len)
{
int ret;
struct sockaddr_storage addr;
socklen_t s_len = sizeof(addr);
ret = getpeername(socket_fd, (struct sockaddr *) &addr, &s_len);
if (mk_unlikely(ret == -1)) {
MK_TRACE("[FD %i] Can't get addr for this socket", socket_fd);
return -1;
}
errno = 0;
if(addr.ss_family == AF_INET) {
if((inet_ntop(AF_INET, &((struct sockaddr_in *)&addr)->sin_addr,
*buf, size)) == NULL) {
mk_warn("mk_socket_ip_str: Can't get the IP text form (%i)", errno);
return -1;
}
}
else if(addr.ss_family == AF_INET6) {
if((inet_ntop(AF_INET6, &((struct sockaddr_in6 *)&addr)->sin6_addr,
*buf, size)) == NULL) {
mk_warn("mk_socket_ip_str: Can't get the IP text form (%i)", errno);
return -1;
}
}
*len = strlen(*buf);
return 0;
}
示例7: mk_conn_close
int mk_conn_close(int socket, int event)
{
MK_TRACE("[FD %i] Connection Handler, closed", socket);
/*
* Remove the socket from the scheduler and make sure
* to disable all notifications.
*/
mk_sched_drop_connection(socket);
/*
* Plugin hook: this is a wrap-workaround to do not
* break plugins until the whole interface events and
* return values are re-worked.
*/
if (event == MK_EP_SOCKET_CLOSED) {
mk_plugin_event_close(socket);
}
else if (event == MK_EP_SOCKET_ERROR) {
mk_plugin_event_error(socket);
}
else if (event == MK_EP_SOCKET_TIMEOUT) {
mk_plugin_event_timeout(socket);
}
return 0;
}
示例8: mk_header_set_http_status
void mk_header_set_http_status(struct mk_http_request *sr, int status)
{
mk_bug(!sr);
sr->headers.status = status;
MK_TRACE("Set HTTP status = %i", status);
}
示例9: mk_conn_error
int mk_conn_error(int socket)
{
int ret = -1;
struct client_session *cs;
struct sched_list_node *sched;
MK_TRACE("Connection Handler, error on FD %i", socket);
/* Plugin hook */
ret = mk_plugin_event_error(socket);
switch(ret) {
case MK_PLUGIN_RET_EVENT_OWNED:
return MK_PLUGIN_RET_CONTINUE;
case MK_PLUGIN_RET_EVENT_CLOSE:
return -1;
case MK_PLUGIN_RET_EVENT_CONTINUE:
break; /* just return controller to invoker */
}
sched = mk_sched_get_thread_conf();
mk_sched_remove_client(sched, socket);
cs = mk_session_get(socket);
if (cs) {
mk_session_remove(socket);
}
return 0;
}
示例10: mk_epoll_add
int mk_epoll_add(int efd, int fd, int init_mode, int behavior)
{
int ret;
struct epoll_event event = {0, {0}};
event.data.fd = fd;
event.events = EPOLLERR | EPOLLHUP | EPOLLRDHUP;
if (behavior == MK_EPOLL_EDGE_TRIGGERED) {
event.events |= EPOLLET;
}
switch (init_mode) {
case MK_EPOLL_READ:
event.events |= EPOLLIN;
break;
case MK_EPOLL_WRITE:
event.events |= EPOLLOUT;
break;
case MK_EPOLL_RW:
event.events |= EPOLLIN | EPOLLOUT;
break;
}
ret = epoll_ctl(efd, EPOLL_CTL_ADD, fd, &event);
if (ret < 0 && errno != EEXIST) {
MK_TRACE("[FD %i] epoll_ctl()", fd, strerror(errno));
return ret;
}
return ret;
}
示例11: mk_socket_safe_event_write
static void mk_socket_safe_event_write(int socket)
{
struct sched_list_node *sched;
sched = mk_sched_get_thread_conf();
MK_TRACE("[FD %i] Safe event write ON", socket);
mk_event_add(sched->loop, socket, MK_EVENT_WRITE, NULL);
}
示例12: mk_socket_safe_event_write
static void mk_socket_safe_event_write(int socket)
{
struct sched_list_node *sched;
sched = mk_sched_get_thread_conf();
MK_TRACE("[FD %i] Safe event write ON", socket);
mk_epoll_change_mode(sched->epoll_fd, socket,
MK_EPOLL_WRITE, MK_EPOLL_LEVEL_TRIGGERED);
}
示例13: mk_user_init
int mk_user_init(struct client_session *cs, struct session_request *sr)
{
int limit;
const int offset = 2; /* The user is defined after the '/~' string, so offset = 2 */
const int user_len = 255;
char user[user_len], *user_uri;
struct passwd *s_user;
if (sr->uri_processed.len <= 2) {
return -1;
}
limit = mk_string_char_search(sr->uri_processed.data + offset, '/',
sr->uri_processed.len);
if (limit == -1) {
limit = (sr->uri_processed.len) - offset;
}
if (limit + offset >= (user_len)) {
return -1;
}
memcpy(user, sr->uri_processed.data + offset, limit);
user[limit] = '\0';
MK_TRACE("user: '%s'", user);
/* Check system user */
if ((s_user = getpwnam(user)) == NULL) {
mk_request_error(MK_CLIENT_NOT_FOUND, cs, sr);
return -1;
}
if (sr->uri_processed.len > (unsigned int) (offset+limit)) {
user_uri = mk_mem_malloc(sr->uri_processed.len);
if (!user_uri) {
return -1;
}
memcpy(user_uri,
sr->uri_processed.data + (offset + limit),
sr->uri_processed.len - offset - limit);
user_uri[sr->uri_processed.len - offset - limit] = '\0';
mk_string_build(&sr->real_path.data, &sr->real_path.len,
"%s/%s%s", s_user->pw_dir, config->user_dir, user_uri);
mk_mem_free(user_uri);
}
else {
mk_string_build(&sr->real_path.data, &sr->real_path.len,
"%s/%s", s_user->pw_dir, config->user_dir);
}
sr->user_home = MK_TRUE;
return 0;
}
示例14: mk_socket_set_cork_flag
/*
* Example from:
* http://www.baus.net/on-tcp_cork
*/
int mk_socket_set_cork_flag(int fd, int state)
{
if (config->corking == MK_FALSE) {
return 0;
}
MK_TRACE("Socket, set Cork Flag FD %i to %s", fd, (state ? "ON" : "OFF"));
return setsockopt(fd, SOL_TCP, TCP_CORK, &state, sizeof(state));
}
示例15: channel_write_stream_file
static inline size_t channel_write_stream_file(struct mk_channel *channel,
struct mk_stream *stream)
{
ssize_t bytes = 0;
MK_TRACE("[CH %i] STREAM_FILE %i, bytes=%lu",
channel->fd, stream->fd, stream->bytes_total);
/* Direct write */
bytes = mk_sched_conn_sendfile(channel,
stream->fd,
&stream->bytes_offset,
stream->bytes_total
);
MK_TRACE("[CH=%d] [FD=%i] WRITE STREAM FILE: %lu bytes",
channel->fd, stream->fd, bytes);
return bytes;
}