From: Paolo Bonzini Date: Wed, 05 Sep 2012 12:05:21 GMT Subject: Re: poll() emulation in git Message-ID: <50474001.5030407@gnu.org> In-Reply-To: <00c001cd8b59$028e41c0$07aac540$@schmitz-digital.de> Il 05/09/2012 13:24, Joachim Schmitz ha scritto: > However: this poll implementation, while compiling OK, doesn't work properly. > Because it uses recv(...,MSG_PEEK), it works on sockets only (returns ENOTSOCK on anything else), while the real poll() works on all > kind if file descriptors, at least that is my understanding. Actually recv(...,MSG_PEEK) on most Unix variants works on non-sockets too. The trick is taken from GNU Pth in turn. > Here on HP NonStop, when being connected via an non-interactive SSH, we get a set of pipes (stdin, stdout, stderr) instead of a > socket to talk to, so the poll() just hangs/loops. Does your system have a working FIONREAD ioctl for pipes? > As git's implementation is based on ('stolen' from?) gnulib's and still pretty similar, CC to the gnulib list and Paolo > > Any idea how this could get solved? I.e. how to implement a poll() that works on non-sockets too? > There is some code that pertains to a seemingly similar problem in Mac OS X, but my problem is not identical, as that fix doesn't > help. Paolo