From 75390f5097cb3116de20663bc5fb7490b6a0c1b3 Mon Sep 17 00:00:00 2001 From: Christian Krinitsin Date: Thu, 20 Mar 2025 17:35:29 +0100 Subject: server: implement a SharedMemoryServer with (de)initilization of the memory buffer --- src/server/shared_memory_server.h | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/server/shared_memory_server.h (limited to 'src/server/shared_memory_server.h') diff --git a/src/server/shared_memory_server.h b/src/server/shared_memory_server.h new file mode 100644 index 0000000..034466d --- /dev/null +++ b/src/server/shared_memory_server.h @@ -0,0 +1,49 @@ +#pragma once + +#include "hashtable.h" +#include "shared_memory.h" +#include +#include +#include + +template +class SharedMemoryServer { +public: + SharedMemoryServer(size_t size) + : hash_table(size) + { + shm_fd = shm_open(SHM_NAME, O_CREAT | O_RDWR, 0666); + + ftruncate(shm_fd, sizeof(SharedMemory)); + + shm = (SharedMemory*) + mmap(0, sizeof(SharedMemory), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); + + pthread_mutexattr_t mutex_attr; + pthread_condattr_t cond_attr; + pthread_mutexattr_init(&mutex_attr); + pthread_mutexattr_setpshared(&mutex_attr, PTHREAD_PROCESS_SHARED); + pthread_condattr_init(&cond_attr); + pthread_condattr_setpshared(&cond_attr, PTHREAD_PROCESS_SHARED); + + pthread_mutex_init(&shm->mutex, &mutex_attr); + pthread_cond_init(&shm->cond_var, &cond_attr); + + shm->head = (shm->tail = 0); + } + + ~SharedMemoryServer() + { + munmap(shm, sizeof(SharedMemory)); + close(shm_fd); + shm_unlink(SHM_NAME); + } + + void process_requests(); + +private: + HashTable hash_table; + + int shm_fd; + SharedMemory* shm; +}; -- cgit 1.4.1