From d65083e92e373692aa57fc913cbfae5d43d7ab63 Mon Sep 17 00:00:00 2001 From: Philippe PITTOLI Date: Wed, 5 Jun 2019 22:25:02 +0200 Subject: [PATCH] Functions for low-level manipulation. --- src/ipc.cr | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/ipc.cr b/src/ipc.cr index 3714420..231297d 100644 --- a/src/ipc.cr +++ b/src/ipc.cr @@ -281,7 +281,16 @@ class IPC::Service close end - def add_file_descriptor (fd : Int) + def << (connection : IPC::Connection) + c = connection.connection + r = LibIPC.ipc_add(pointerof(@connections), pointerof(c)) + if r != 0 + m = String.new LibIPC.ipc_errors_get (r) + raise Exception.new "cannot add an arbitrary file descriptor: #{m}" + end + end + + def << (fd : Int) r = LibIPC.ipc_add_fd(pointerof(@connections), fd) if r != 0 m = String.new LibIPC.ipc_errors_get (r) @@ -289,14 +298,13 @@ class IPC::Service end end - # TODO: not implemented in libipc, yet. - # def del_file_descriptor (fd : Int) - # r = LibIPC.ipc_del_fd(pointerof(@connections), fd) - # if r != 0 - # m = String.new LibIPC.ipc_errors_get (r) - # raise Exception.new "cannot remove an arbitrary file descriptor: #{m}" - # end - # end + def remove_fd (fd : Int) + r = LibIPC.ipc_del_fd(pointerof(@connections), fd) + if r != 0 + m = String.new LibIPC.ipc_errors_get (r) + raise Exception.new "cannot remove an arbitrary file descriptor: #{m}" + end + end def close return if @closed