#include #include #include #include #include #include #include #include #include using namespace std; #define server1_file "/tmp/criu/ipc_server1.sock" #define client1_file "/tmp/criu/ipc_client1.sock" #define server2_file "/tmp/criu/ipc_server2.sock" #define client2_file "/tmp/criu/ipc_client2.sock" // Global var for unix socket udp; int socket_fd_server_1; int socket_fd_server_2; int socket_fd_client_1; int socket_fd_client_2; struct sockaddr_un server_addr1; struct sockaddr_un server_addr2; struct sockaddr_un client_addr1; struct sockaddr_un client_addr2; socklen_t server_addr_len1; socklen_t server_addr_len2; socklen_t client_addr_len1; socklen_t client_addr_len2; void init_socket() { memset(&server_addr1,0,sizeof(server_addr1)); memset(&server_addr2,0,sizeof(server_addr2)); server_addr1.sun_family = AF_UNIX; server_addr2.sun_family = AF_UNIX; strcpy(server_addr1.sun_path,server1_file); strcpy(server_addr2.sun_path,server2_file); server_addr_len1 = sizeof(server_addr1); server_addr_len2 = sizeof(server_addr2); } ssize_t ipc_udp_server_recv(int __fd, void *__restrict__ __buf, size_t __n, int __flags) { client_addr_len1 = sizeof(client_addr1); client_addr_len2 = sizeof(client_addr2); if(socket_fd_server_1 == __fd) return recvfrom(__fd, __buf, __n, __flags, (sockaddr*)&client_addr1, &client_addr_len1); else if(socket_fd_server_2 == __fd) return recvfrom(__fd, __buf, __n, __flags, (sockaddr*)&client_addr2, &client_addr_len2); else return -1; } ssize_t ipc_udp_server_send(int __fd, void *__restrict__ __buf, size_t __n, int __flags) { if(socket_fd_server_1 == __fd) return sendto(__fd, __buf, __n, __flags, (sockaddr*)&client_addr1, client_addr_len1); else if(socket_fd_server_2 == __fd) return sendto(__fd, __buf, __n, __flags, (sockaddr*)&client_addr2, client_addr_len2); else return -1; } ssize_t ipc_udp_client_send(int __fd, void *__restrict__ __buf, size_t __n, int __flags) { if(socket_fd_client_1 == __fd) return sendto(__fd, __buf, __n, __flags, (sockaddr*)&server_addr1, server_addr_len1); else if(socket_fd_client_2 == __fd) return sendto(__fd, __buf, __n, __flags, (sockaddr*)&server_addr2, server_addr_len2); else return -1; } ssize_t ipc_udp_client_recv(int __fd, void *__restrict__ __buf, size_t __n, int __flags) { if(socket_fd_client_1 == __fd) return recvfrom(__fd, __buf, __n, __flags, (sockaddr*)&server_addr1, &server_addr_len1); else if(socket_fd_client_2 == __fd) return recvfrom(__fd, __buf, __n, __flags, (sockaddr*)&server_addr2, &server_addr_len2); else return -1; }