DMARC-Filter: OpenDMARC Filter v1.4.2 delorie.com 62N83WfU3352694 Authentication-Results: delorie.com; dmarc=pass (p=none dis=none) header.from=cygwin.com Authentication-Results: delorie.com; spf=pass smtp.mailfrom=cygwin.com DKIM-Filter: OpenDKIM Filter v2.11.0 delorie.com 62N83WfU3352694 Authentication-Results: delorie.com; dkim=pass (1024-bit key, unprotected) header.d=cygwin.com header.i=@cygwin.com header.a=rsa-sha256 header.s=default header.b=T+kIgH1n X-Recipient: archive-cygwin AT delorie DOT com DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A6FB84BB3BB3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; s=default; t=1774253011; bh=cSRAMS52RYXL0w+W5M+pjbJqwSuhggz+eQ7nAR5dBb4=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=T+kIgH1nKqcerP4jpTLkHkXlzFrGUky45BKrylAF7JtbCbhMB2qErMCej+NA/Tkwl Or+z6qin+RWTE23cNvkNgJGCEdo1b3rW42tCqm1T5bQGfv2ax+OD5twQtxHaB/ol2j B4EX6GL9zIRD4+LAGRhiRQdY/ObxqoK+oSU36RmA= X-Original-To: cygwin AT cygwin DOT com Delivered-To: cygwin AT cygwin DOT com DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D62154B9DB68 ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D62154B9DB68 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774252962; cv=none; b=UyQeYS+ciPQKkiGUf6N2t4TvoB9IZx8lAZdfhkimkGoFMW+wWfbK8qESikGnjGy1c2swNLMJjujBprFJQhph0v6U4YAtOS+tSE/RlG1QU+InjXakkGK5Fntr4L9mUQW/C94hbGflfBA5058NxT4V322CnGRRN4W+eRJvOqfW3MM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774252962; c=relaxed/simple; bh=jznN7QojIolRPcoJ9J/US1GvvzWPRpbvvkHDZ+3WCyQ=; h=DKIM-Signature:Subject:To:From:Message-ID:Date:MIME-Version; b=YK7xbD3rrSKMHeaF0nby26xskRdyRaDHLH9U8EXvUdwSbZR5m5sGONTzAJtI3HTWCu4vLM/M0ONY/J6vWtRMLHikWt8Fqb0CPDfVn+Ni+WtUU52GEs9MEtBTQ7c/5jvwsHCZ156oR7hvC7a3v+oAjCSM1iDOY35B28WY1ecOnGs= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D62154B9DB68 Subject: Re: epoll implementation for Cygwin To: cygwin AT cygwin DOT com References: <8d05ff34-1f75-42c1-b72a-621163a68cbf AT hamishmb DOT com> Organization: WiseMo A/S Message-ID: Date: Mon, 23 Mar 2026 09:02:36 +0100 X-Mailer: Epyrus/2.1.3 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-BeenThere: cygwin AT cygwin DOT com X-Mailman-Version: 2.1.30 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Jakob Bohm via Cygwin Reply-To: Jakob Bohm Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com Sender: "Cygwin" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by delorie.com id 62N83WfU3352694 On 21/03/2026 01:51, Daisuke Fujimura via Cygwin wrote: > Hi Hamish and all, > > As the author of cygepoll, I’d like to provide some context regarding > its implementation. > > Currently, cygepoll is an experimental wrapper around upoll > (https://github.com/richardhundt/upoll). In the Cygwin environment, it > simply maps the epoll interface onto poll or select. > > Because it relies on these underlying mechanisms, it doesn't offer the > performance benefits typically associated with epoll on Linux. It > essentially carries the same overhead as poll or select. > > If the goal is to provide a truly performant epoll implementation for > Cygwin, I believe it should be implemented natively within > cygwin1.dll—perhaps by leveraging Windows-specific APIs. Indeed, Windows sockets (WinSock2) has a more powerful implementation of select() than traditional POSIX systems like Linux.  In particular, WinSock native select uses true sets for the handle lists and isn't limited to the low valued handles like on Linux, though cygwin may be emulating the Linux-style FD_SET implementation.  There is also the WSAEventSelect() native function which maps the wait for a single (socket,condition) to a wait for a single Win32 Event (an NT kernel KEVENT, which is a tiny object), and the core Win32 API has the WaitForMultipleObject() family of functions which can wait for up to 64 such Win32 events or a timeout in parallel, allowing easy handling of 63 events per thread in a thread pool (Using the 64th slot for signalling changes to the list of events). > Providing cygepoll as a standalone package might offer API > compatibility, but it wouldn't meet the performance expectations users > have for epoll. Therefore, I think discussing a native implementation > within the Cygwin core is a more meaningful path than packaging my > current experimental library. > > Best regards, > > Daisuke Fujimura > > On Sat, Mar 21, 2026 at 6:03 AM Hamish McIntyre-Bhatty via Cygwin > wrote: >> Hi all, >> >> I recently stumbled across this epoll implementation for Cygwin: >> https://github.com/fd00/cygepoll >> >> I'm not sure how to test it, or even if it would still work, as it is >> very old, but I know that wxWidgets at least could benefit from >> something like this. Is there any chance we could integrate it into >> Cygwin as a package? Enjoy Jakob -- Jakob Bohm, CIO, Partner, WiseMo A/S. https://www.wisemo.com Transformervej 29, 2860 Søborg, Denmark. Direct +45 31 13 16 10 This public discussion message is non-binding and may contain errors. WiseMo - Remote Service Management for PCs, Phones and Embedded -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple