加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
commom_ipc.h 4.04 KB
一键复制 编辑 原始数据 按行查看 历史
codeheng 提交于 2015-02-04 20:01 . new file
#ifndef _COMMOM_IPC_H_
#define _COMMOM_IPC_H_
#include <sys/types.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <time.h>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#define SUCCESS 0
#define FAIL -1
#define UNIX_OVER_UDP_SERVER 1
#define UNIX_OVER_UDP_CLIENT 0
#define MAX_MSG_SIZE 512
#define MAX_SHM_SIZE 512
#define MAX_SOCKET_SIZE 1024*2
#define MAX_SOCKET_EACH_SEND_SIZE 1024
//#define WRITE_ERR_LOG
#ifdef WRITE_ERR_LOG
extern FILE *pLog;
#define err_printf(format, ...) do\
{ \
pLog = fopen("./event.log", "a+");\
time_t t = time(NULL);\
fprintf(pLog, "%s%s: %d: "format"", ctime(&t), __FILE__, __LINE__, ##__VA_ARGS__);\
fclose(pLog);\
}while(0);
#else
#define err_printf(format, ...) printf("%s: %d: "format"", __FILE__, __LINE__, ##__VA_ARGS__)
#endif
class MallocMem
{
char *pBuffer;
int length;
public:
MallocMem(int byte);
char *c_str();
int set_buffer(char *pdata);
int get_buffer(char *pdata);
int size();
virtual ~MallocMem();
};
class MessageData
{
public:
long int m_type;
int cmd;
int valid_size;
char m_buffer[MAX_MSG_SIZE];
public:
MessageData();
int ImportBuffer(char *pdata);
int ExportBuffer(char *pdata);
};
class Message
{
MessageData msg;
int msg_id;
public:
Message(key_t key);
int send_msg();
int recv_msg(long int type);
int set_message(MessageData *message);
int get_message(MessageData *message);
int delete_msg();
};
class ShareMemoryData
{
public:
int valid_size;
char buffer[MAX_SHM_SIZE];
public:
ShareMemoryData();
};
class ShareMemory
{
int shm_id;
ShareMemoryData *shm;
public:
ShareMemory(key_t key);
int get_shm(ShareMemoryData *shmptr);
int set_shm(ShareMemoryData *shmptr);
int delete_shm();
};
class Semaphore
{
int sem_set_id;
union semun
{
int val;
struct semid_ds *buf;
unsigned short *array;
} sem;
public:
Semaphore(key_t key, int num_sems);
int InitSem(int index, int value);
int WaitSem(int index);
int SignalSem(int index);
int DeleteSem(int index);
};
class SocketDataHead
{
public:
int cmd;
int valid_size;
public:
SocketDataHead();
};
class SocketData
{
public:
SocketDataHead data_head;
char buffer[MAX_SOCKET_SIZE];
public:
SocketData();
int set_cmd(int cmd);
int get_cmd();
int set_valid_size(int valid_size);
int get_valid_size();
int ImportBuffer(char *pdata);
int ExportBuffer(char *pdata);
};
class SocketSession
{
int new_fd;
int listen_fd;
int sock_type;
int sock_domain;
int sock_port;
char *sock_ip;
int sock_backlog;
char *sock_path;
int sock_path_size;
SocketData sockdata;
struct sockaddr_in RemoteAddr;
struct sockaddr_in LocalAddr;
struct sockaddr_un server_addr;
struct sockaddr_un client_addr;
int CommomSessionInit(int domain, int type, int backlog);
int CommomOverTCPSend(int sockfd);
int CommomOverTCPRecv(int sockfd);
int CommomOverUDPSend(struct sockaddr_in *sock_addr, char *ipaddr, int port);
int CommomOverUDPRecv(struct sockaddr_in *sock_addr);
public:
SocketSession(char *ipaddr, int port, int domain, int type, int backlog);
SocketSession(int domain, int type, int backlog, char *path, int path_size);
virtual ~SocketSession();
int SetSocketData(SocketData *pdata);
int GetSocketData(SocketData *pdata);
int InitServerSocket();
int SetNoBlock();
int SocketAccept();
int SocketConnect();
int SocketSend();
int SocketRecv();
int SocketCloseClient();
int SocketCloseListen();
int SetSocketSendBufSize(int size);
int SetSocketRecvBufSize(int size);
};
#endif
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化