diff --git a/src/client.cpp b/src/client.cpp index 89ba30e..8e439d9 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -11,7 +11,9 @@ int main() { mkfifo("/tmp/rpc_out", 0666); // IPC‑уровень: канал поверх pipe. - IpcPipeChannel ch("/tmp/rpc_in", "/tmp/rpc_out"); + // Клиент пишет в fifo, который читает сервер (rpc_in), + // и читает из fifo, в который пишет сервер (rpc_out). + IpcPipeChannel ch("/tmp/rpc_out", "/tmp/rpc_in"); // RPC‑уровень: прокси поверх канала. MyServiceProxy proxy(ch); diff --git a/src/rpc/IpcPipeChannel.h b/src/rpc/IpcPipeChannel.h index 0d4f17e..5c18d98 100644 --- a/src/rpc/IpcPipeChannel.h +++ b/src/rpc/IpcPipeChannel.h @@ -8,13 +8,16 @@ // IPC‑канал поверх именованных pipe. // Инкапсулирует работу с файловыми дескрипторами и обмен сообщениями IpcMessage. +// readPipe — тот FIFO, который этот endpoint читает; writePipe — тот, в который пишет. class IpcPipeChannel : public RpcChannel { public: - IpcPipeChannel(const char* writePipe, const char* readPipe) { + IpcPipeChannel(const char* readPipe, const char* writePipe) { // Канал не создаёт FIFO, только открывает. - fdOut_ = ::open(writePipe, O_WRONLY); - fdIn_ = ::open(readPipe, O_RDONLY); + // Открываем оба конца как O_RDWR, чтобы избежать блокировок на open(O_RDONLY/O_WRONLY). + // При этом логически читаем только из readPipe, а пишем только в writePipe. + fdIn_ = ::open(readPipe, O_RDWR); + fdOut_ = ::open(writePipe, O_RDWR); } ~IpcPipeChannel() override { diff --git a/src/server.cpp b/src/server.cpp index 6884dc6..89a83df 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -11,6 +11,7 @@ int main() { mkfifo("/tmp/rpc_out", 0666); // IPC‑уровень: канал поверх pipe. + // Сервер читает из rpc_in и пишет в rpc_out. IpcPipeChannel ch("/tmp/rpc_in", "/tmp/rpc_out"); // RPC‑уровень: скелет поверх того же канала.