46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
#include <stdbool.h>
|
|
|
|
#pragma once
|
|
#include "uv.h"
|
|
|
|
#ifndef offsetof
|
|
#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER)
|
|
#endif
|
|
|
|
#define container_of(ptr, type, member) ((type *)(((char *)(ptr)) - offsetof(type, member)))
|
|
|
|
union stream_handle2 {
|
|
uv_pipe_t pipe;
|
|
uv_tcp_t tcp;
|
|
};
|
|
|
|
typedef unsigned char handle_storage_t[sizeof(union stream_handle2)];
|
|
|
|
struct server_ctx {
|
|
int index;
|
|
handle_storage_t server_handle;
|
|
unsigned int num_connects;
|
|
uv_async_t async_handle;
|
|
uv_thread_t thread_id;
|
|
uv_sem_t semaphore;
|
|
bool tcp_nodelay;
|
|
unsigned int listen_backlog;
|
|
};
|
|
|
|
struct ipc_client_ctx {
|
|
uv_connect_t connect_req;
|
|
uv_stream_t *server_handle;
|
|
uv_pipe_t ipc_pipe;
|
|
char scratch[16];
|
|
};
|
|
|
|
struct ipc_server_ctx {
|
|
handle_storage_t server_handle;
|
|
unsigned int num_connects;
|
|
uv_pipe_t ipc_pipe;
|
|
bool tcp_nodelay;
|
|
};
|
|
|
|
void connection_consumer_start(void *arg);
|
|
void connection_consumer_close(uv_async_t *handle, int status);
|