79 lines
2.8 KiB
C++
79 lines
2.8 KiB
C++
#include <sys/types.h>
|
||
#include <sys/socket.h>
|
||
#include <sys/un.h>
|
||
#include <memory.h>
|
||
#include <unistd.h>
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include <iostream>
|
||
#include <pthread.h>
|
||
|
||
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;
|
||
} |