#include <cstring>
|
#include <stdio.h>
|
#include <unistd.h>
|
|
#include <sys/types.h>
|
#include <sys/stat.h>
|
|
#include "src2/shmh.h"
|
|
#include <chrono>
|
|
int main(int argc, char const *argv[])
|
{
|
int sock = unix_domain_client_fd("/tmp/memfd_shm.sock", 0);
|
if (sock <= 0){
|
printf("unix_domain_client_fd failed\n");
|
return -1;
|
}
|
|
int count = 0;
|
|
using namespace std::chrono;
|
auto s = steady_clock::now();
|
auto e = s;
|
|
while (true) {
|
|
int recvfds[16];
|
memset(recvfds, 0, sizeof(int)*16);
|
int fd = recvfd(sock, recvfds, 16);
|
if (fd < 0){
|
printf("memfd %d no exist\n", fd);
|
continue;
|
}
|
// struct stat st;
|
// if (fstat (fd, &st))
|
// {
|
// return -1;
|
// }
|
// printf("st size %ld\n", st.st_size);
|
|
count++;
|
|
unsigned char* addr;
|
int len = basic_shm_mmap(recvfds[0], &addr);
|
if (len <= 0) break;
|
printf("======>> mmap len %d msg %s\n", len, addr);
|
basic_shm_unmmap(fd, &addr);
|
for (int i = 0; i < 16; i++) {
|
close(recvfds[i]);
|
}
|
usleep(20000);
|
|
// e = steady_clock::now();
|
// if (duration_cast<milliseconds>(e-s).count() > 1000){
|
// s = e;
|
// printf("======>> around 1 s recv count %d\n", count);
|
// _exit(0);
|
// count = 0;
|
// }
|
}
|
|
close(sock);
|
|
return 0;
|
}
|