public BufferEvent(EventBase eventBase, IntPtr socket, int timeout) { var options = (int)(BufferEventOptions.CloseOnFree | BufferEventOptions.DeferCallbacks); bev = bufferevent_socket_new(eventBase.Handle, socket, options); var t = timeval.FromTimeSpan(TimeSpan.FromMilliseconds(timeout)); bufferevent_set_timeouts(bev, ref t, ref t); //Console.WriteLine("bufferevent_socket_new returned " + bev.ToInt32()); // none of these can throw exceptions. readdel = new bufferevent_data_cb(ReadCallbackInternal); var readCb = Marshal.GetFunctionPointerForDelegate(readdel); writedel = new bufferevent_data_cb(WriteCallbackInternal); var writeCb = Marshal.GetFunctionPointerForDelegate(writedel); eventdel = new bufferevent_event_cb(EventCallbackInternal); var eventCb = Marshal.GetFunctionPointerForDelegate(eventdel); bufferevent_setcb(bev, readCb, writeCb, eventCb, IntPtr.Zero); }
void Dispose(bool disposing) { if (!disposed) { disposed = true; if (disposing) { if (input != null) input.Dispose(); if (output != null) output.Dispose(); readdel = null; writedel = null; eventdel = null; } bufferevent_free(bev); } }