     public let registration: R
     public let io: IOEvent
     
-    init(isReadable: Bool, isWritable: Bool, registration: R) {
-        if isReadable {
-            io = isWritable ? .all : .read
-        } else if isWritable {
+    init(readable: Bool, writable: Bool, registration: R) {
+        if readable {
+            io = writable ? .all : .read
+        } else if writable {
             io =  .write
         } else {
             io = .none

                break
            case EVFILT_READ:
                if let registration = registrations[Int(ev.ident)] {
                    try fn((SelectorEvent(isReadable: true, isWritable: false, registration: registration)))
                }
            case EVFILT_WRITE:
                if let registration = registrations[Int(ev.ident)] {
                    try fn((SelectorEvent(isReadable: false, isWritable: true, registration: registration)))
                }
            default:
                // We only use EVFILT_USER, EVFILT_READ and EVFILT_WRITE.

                let registration = registrations[Int(ev.data.fd)]!
                try fn(
                    SelectorEvent(
                        readable: (ev.events & EPOLLIN.rawValue) != 0 || (ev.events & EPOLLERR.rawValue) != 0 || (ev.events & EPOLLRDHUP.rawValue) != 0,
                        writable: (ev.events & EPOLLOUT.rawValue) != 0 || (ev.events & EPOLLERR.rawValue) != 0 || (ev.events & EPOLLRDHUP.rawValue) != 0,
                        registration: registration))
            }
        }
