diff --git a/FlyingSocks/Sources/AsyncSocket.swift b/FlyingSocks/Sources/AsyncSocket.swift index 8d235e9..31f9f00 100644 --- a/FlyingSocks/Sources/AsyncSocket.swift +++ b/FlyingSocks/Sources/AsyncSocket.swift @@ -131,7 +131,7 @@ public struct AsyncSocket: Sendable { @Sendable public func accept() async throws -> AsyncSocket { - try await pool.loopUntilReady(for: .connection, on: socket) { + try await pool.loopUntilReady(for: .read, on: socket) { let file = try socket.accept().file let socket = Socket(file: file) return try AsyncSocket(socket: socket, pool: pool) diff --git a/FlyingSocks/Sources/SocketPool+ePoll.swift b/FlyingSocks/Sources/SocketPool+ePoll.swift index a104e01..66ef808 100644 --- a/FlyingSocks/Sources/SocketPool+ePoll.swift +++ b/FlyingSocks/Sources/SocketPool+ePoll.swift @@ -105,6 +105,7 @@ public struct ePoll: EventQueue { } mutating func setEvents(_ events: Socket.Events, for socket: Socket.FileDescriptor) throws { + if existing[socket] == events { return } var event = CSystemLinux.epoll_event() event.events = events.epollEvents.rawValue event.data.fd = socket.rawValue @@ -242,7 +243,9 @@ private struct EPOLLEvents: OptionSet, Hashable { private extension Socket.Events { var epollEvents: EPOLLEvents { - reduce(EPOLLEvents()) { [$0, $1.epollEvent] } + var events = reduce(EPOLLEvents()) { [$0, $1.epollEvent] } + events.insert(.edgeTriggered) + return events } static func make(from pollevents: EPOLLEvents) -> Socket.Events {