| | |
| | | #include "usg_typedef.h" |
| | | #include "shm_queue.h" |
| | | #include "lock_free_queue.h" |
| | | #include <functional> |
| | | |
| | | enum shm_socket_type_t |
| | | { |
| | |
| | | |
| | | }; |
| | | |
| | | |
| | | |
| | | typedef struct shm_packet_t { |
| | | int key; |
| | | size_t size; |
| | | void * buf; |
| | | char uuid[64]; |
| | | |
| | | } shm_packet_t; |
| | | |
| | |
| | | |
| | | LockFreeQueue<shm_packet_t> *queue; //self queue |
| | | LockFreeQueue<shm_packet_t> *remoteQueue; // peer queue |
| | | std::map<std::string, shm_packet_t> recvbuf; |
| | | |
| | | |
| | | } shm_socket_t; |
| | | |
| | | |
| | | // typedef void (*recv_callback_fn)(void **sendbuf, int *sendsize); |
| | | typedef std::function<void(void **sendbuf, int *sendsize)> recv_callback_fn; |
| | | |
| | | size_t shm_socket_remove_keys(int keys[], size_t length); |
| | | |
| | |
| | | int shm_recvfrom(shm_socket_t *socket, void **buf, int *size, int *key, const struct timespec * timeout = NULL, int flags=0); |
| | | |
| | | int shm_sendandrecv(shm_socket_t *socket, const void *send_buf, const int send_size, const int send_key, void **recv_buf, int *recv_size, |
| | | const struct timespec * timeout = NULL, int flags=0); |
| | | const struct timespec * timeout = NULL, int flags = 0); |
| | | |
| | | /** |
| | | * 功能同shm_sendandrecv, 但是不是线程安全的 |
| | | * @callback void (*recv_callback_fn)(void **sendbuf, int *sendsize) |
| | | * sendbuf 和 sendsize是callbak_fn回调函数的返回值, 分别表示发送数据,和发送数据的大小。 |
| | | * |
| | | */ |
| | | int shm_sendandrecv_unsafe(shm_socket_t *socket, const void *send_buf, const int send_size, const int send_key, void **recv_buf, int *recv_size, |
| | | const struct timespec * timeout = NULL, int flags=0); |
| | | int shm_recvandsend(shm_socket_t *sockt, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback, |
| | | const struct timespec *timeout = NULL, int flag = 0); |
| | | |
| | | |
| | | |
| | | |