diff --git a/src/ipc.cr b/src/ipc.cr index 955c2ab..231297d 100644 --- a/src/ipc.cr +++ b/src/ipc.cr @@ -190,8 +190,8 @@ class IPC::Event end class IPC::Connection - @closed = false - @connection : LibIPC::Connection + getter connection : LibIPC::Connection + getter closed = false # connection already established def initialize(c : LibIPC::Connection) @@ -250,7 +250,7 @@ class IPC::Connection r = LibIPC.ipc_close(pointerof(@connection)) if r != 0 m = String.new LibIPC.ipc_errors_get (r) - raise Exception.new "cannot close correctly the connection: #{m}" + raise Exception.new "cannot correctly close the connection: #{m}" end @closed = true @@ -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