diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index e35808a008..b907c112b8 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -1725,13 +1725,20 @@ def _bind_http_server_tcp(self): try: self.http_server.listen(port, self.ip) except socket.error as e: + eacces = (errno.EACCES, getattr(errno, 'WSAEACCES', errno.EACCES)) + if sys.platform == 'cygwin': + # Cygwin has a bug that causes EPERM to be returned in this + # case instead of EACCES: + # https://cygwin.com/ml/cygwin/2019-04/msg00160.html + eacces += (errno.EPERM,) + if e.errno == errno.EADDRINUSE: if self.port_retries: self.log.info(_('The port %i is already in use, trying another port.') % port) else: self.log.info(_('The port %i is already in use.') % port) continue - elif e.errno in (errno.EACCES, getattr(errno, 'WSAEACCES', errno.EACCES)): + elif e.errno in eacces: self.log.warning(_("Permission to listen on port %i denied.") % port) continue else: