Re: EPERM on bind() ?
- Date: Tue, 23 Apr 2019 14:28:21 +0200
- From: "E. Madison Bray" <erik.m.bray@xxxxxxxxx>
- Subject: Re: EPERM on bind() ?
On Tue, Apr 23, 2019 at 2:17 PM E. Madison Bray wrote:
> I have had some users of the Jupyter Notebook  on Cygwin report an
> crash on startup where, when the Notebook server tries to bind() to
> the port it will listen on (TCP 8888) the bind() fails and errno is
> set to EPERM, which is not an expected errno from bind().
> Looking at the Cygwin sources, in net.cc I see that in
> set_winsock_errno, EPERM is returned by default if there is some WSA
> error for which there is no POSIX equivalent mapped. Fine--EPERM is
> as good as any other fallback I suppose (?) in that it unambiguously
> indicates some unknown WSA error.
> I'm just wondering if anyone has any idea what might cause such an
> error. Some third-party firewall or BLODA? I can't reproduce it
> myself. Trying to bind to a port already in use correctly returns
>  https://jupyter.org/
Answering my own question after comparing the list on
to Cygwin's wsock_errmap table this is a likely culprit:
> Permission denied.An attempt was made to access a socket in a way forbidden by its access permissions.
> An example is using a broadcast address for sendto without broadcast permission being set using
> Another possible reason for the WSAEACCES error is that when the bind function is called (on Windows NT
> 4.0 with SP4 and later), another application, service, or kernel mode driver is bound to the same address
> with exclusive access. Such exclusive access is a new feature of Windows NT 4.0 with SP4 and later, and is
> implemented by using the SO_EXCLUSIVEADDRUSE option.
This appears to be missing from the wsock_errmap table, but should
obviously map to EACCES. I'll supply a patch.
Problem reports: http://cygwin.com/problems.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple