12 #ifndef SST_CORE_INTERPROCESS_TUNNEL_SHM_CHILD_H 13 #define SST_CORE_INTERPROCESS_TUNNEL_SHM_CHILD_H 15 #include "sst/core/interprocess/tunneldef.h" 37 template <
typename TunnelType>
47 explicit SHMChild(
const std::string& region_name) :
51 fd = shm_open(region_name.c_str(), O_RDWR, S_IRUSR | S_IWUSR);
52 filename = region_name;
56 fprintf(stderr,
"Failed to open IPC region '%s': %s\n", filename.c_str(), strerror(errno));
61 if ( shmPtr == MAP_FAILED ) {
63 fprintf(stderr,
"mmap 0 failed: %s\n", strerror(errno));
67 tunnel =
new TunnelType(shmPtr);
68 shmSize = tunnel->getTunnelSize();
72 shmPtr = mmap(
nullptr, shmSize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
73 if ( shmPtr == MAP_FAILED ) {
75 fprintf(stderr,
"mmap 1 failed: %s\n", strerror(errno));
78 uint32_t childnum = tunnel->initialize(shmPtr);
79 if ( childnum == 0 ) {
80 shm_unlink(filename.c_str());
89 munmap(shmPtr, shmSize);
109 std::string filename;
117 #endif // SST_CORE_INTERPROCESS_TUNNEL_SHM_CHILD_H SHMChild(const std::string ®ion_name)
Child-side tunnel manager for an IPC tunnel Accesses an existing Tunnel using shared memory...
Definition: shmchild.h:47
virtual ~SHMChild()
Destructor.
Definition: shmchild.h:85
TunnelType * getTunnel()
return a pointer to the tunnel
Definition: shmchild.h:100
Class supports an IPC tunnel between two or more processes, via posix shared memory This class attach...
Definition: shmchild.h:38
Definition: circularBuffer.h:20
const std::string & getRegionName() const
return the name of the shared memory region
Definition: shmchild.h:103
Definition: tunneldef.h:37