I think it is safe for us to replace NS poll with attached implementation.
Stephen Deasey wrote:
I think OSX is the only poll() underachiever we care about.
Sourceforge has 10.1 and 10.2 hosts you can compile and test on, if
you're interested:
http://sourceforge.net/docman/display_doc.php?docid=762&group_id=1
On Apr 3, 2005 4:44 PM, Vlad Seryakov <[EMAIL PROTECTED]> wrote:
I found this, looks like we can use it.
i made a copy, so if evrybody is okay i can replace this poll.
http://mail.python.org/pipermail/python-list/2001-October/069168.html
--
Vlad Seryakov
571 262-8608 office
[EMAIL PROTECTED]
http://www.crystalballinc.com/vlad/
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
naviserver-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/naviserver-devel
--
Vlad Seryakov
571 262-8608 office
[EMAIL PROTECTED]
http://www.crystalballinc.com/vlad/
#ifndef HAVE_POLL
struct pollfd {
int fd;
short events;
short revents;
};
#define POLLIN 001
#define POLLPRI 002
#define POLLOUT 004
#define POLLNORM POLLIN
#define POLLERR 010
#define POLLHUP 020
#define POLLNVAL 040
----------------------------------------
/*
* prt
*
* Copyright 1994 University of Washington
*
* Permission is hereby granted to copy this software, and to
* use and redistribute it, except that this notice may not be
* removed. The University of Washington does not guarantee
* that this software is suitable for any purpose and will not
* be held liable for any damage it may cause.
*/
/*
** emulate poll() for those platforms (Ultrix) that don't have it.
*/
#include <sys/types.h>
#include <sys/time.h>
int
poll(fds, nfds, timo)
struct pollfd *fds;
unsigned long nfds;
int timo;
{
struct timeval timeout, *toptr;
fd_set ifds, ofds, efds, *ip, *op, *ep;
int i, rc, n;
FD_ZERO(&ifds);
FD_ZERO(&ofds);
FD_ZERO(&efds);
for (i = 0, n = -1, op = ip = 0; i < nfds; ++i) {
fds[i].revents = 0;
if (fds[i].fd < 0)
continue;
if (fds[i].fd > n)
n = fds[i].fd;
if (fds[i].events & (POLLIN|POLLPRI)) {
ip = &ifds;
FD_SET(fds[i].fd, ip);
}
if (fds[i].events & POLLOUT) {
op = &ofds;
FD_SET(fds[i].fd, op);
}
FD_SET(fds[i].fd, &efds);
}
if (timo < 0)
toptr = 0;
else {
toptr = &timeout;
timeout.tv_sec = timo / 1000;
timeout.tv_usec = (timo - timeout.tv_sec * 1000) * 1000;
}
rc = select(++n, ip, op, &efds, toptr);
if (rc <= 0)
return rc;
for (i = 0, n = 0; i < nfds; ++i) {
if (fds[i].fd < 0) continue;
if (fds[i].events & (POLLIN|POLLPRI) && FD_ISSET(i, &ifds))
fds[i].revents |= POLLIN;
if (fds[i].events & POLLOUT && FD_ISSET(i, &ofds))
fds[i].revents |= POLLOUT;
if (FD_ISSET(i, &efds))
/* Some error was detected ... should be some way to know. */
fds[i].revents |= POLLHUP;
}
return rc;
}
#endif