Daniel Walker wrote:
Dan Kegel wrote:
Daniel Walker wrote:
The problem is that poll returns POLLHUP when a socket isn't connected,
then wine ignores the socket and it's events .. I realize this has been known for a some time(since linux 2.4), but why hasn't it been fix? Doesn't this effect a lot of non-blocking socket applications?
Can you define the problem a bit more? Do you mean you get a POLLHUP *while waiting* for connection?
No, I mean that a socket is created using socket() then, say, ioctl()
is run on it. ioctl() then ,through the wineserver, runs sock_reselect() then poll() returns POLLHUP in revents and the wineserver stop watching the socket .. Since most non-blocking applications run socket() then ioctl() I would think that several applications would be effected..
When I run the following program, I get n=0 consistently on linux 2.2 or 2.4. Did I misunderstand the test condition?
#include <stdio.h> #include <sys/poll.h>
main() { int fd; struct pollfd pfds[1]; int n;
fd = socket(); pfds[0].fd = fd; pfds[0].events = POLLIN|POLLOUT; n = poll(pfds, 1, 0); printf("n %d, revents %x\n", n, pfds[0].revents); }