+1998-06-25 Andi Kleen <ak@muc.de>
+
+ * inet/rcmd.c (rcmd): Change to use __poll instead of select.
+ * resolv/res_send.c (res_send): Likewise.
+
1998-06-27 12:58 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/bsd/poll.c: Define __poll, make poll weak alias.
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
+#include <sys/poll.h>
#include <sys/socket.h>
#include <sys/stat.h>
size_t hstbuflen;
char *tmphstbuf;
struct sockaddr_in sin, from;
- fd_set reads;
+ struct pollfd pfd[2];
int32_t oldmask;
pid_t pid;
int s, lport, timo;
tmphstbuf = __alloca (hstbuflen);
}
+ pfd[0].events = POLLIN;
+ pfd[1].events = POLLIN;
+
*ahost = hp->h_name;
oldmask = sigblock(sigmask(SIGURG));
for (timo = 1, lport = IPPORT_RESERVED - 1;;) {
(void)close(s2);
goto bad;
}
- FD_ZERO(&reads);
- FD_SET(s, &reads);
- FD_SET(s2, &reads);
+ pfd[0].fd = s;
+ pfd[1].fd = s2;
__set_errno (0);
- if (select(1 + (s > s2 ? s : s2), &reads, 0, 0, 0) < 1 ||
- !FD_ISSET(s2, &reads)) {
+ if (__poll (pfd, 2, -1) < 1 || (pfd[1].revents & POLLIN) == 0){
if (errno != 0)
(void)fprintf(stderr,
- _("rcmd: select (setting up stderr): %m\n"));
+ _("rcmd: poll (setting up stderr): %m\n"));
else
(void)fprintf(stderr,
- _("select: protocol failure in circuit setup\n"));
+ _("poll: protocol failure in circuit setup\n"));
(void)close(s2);
goto bad;
}
#include <sys/types.h>
#include <sys/param.h>
+#include <sys/poll.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/uio.h>
static int connected = 0; /* is the socket connected */
static int vc = 0; /* is the socket a virtual circuit? */
-#ifndef FD_SET
-/* XXX - should be in portability.h */
-#define NFDBITS 32
-#define FD_SETSIZE 32
-#define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
-#define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
-#define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
-#define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
-#endif
-
/* XXX - this should be done in portability.h */
#if (defined(BSD) && (BSD >= 199103)) || defined(linux)
# define CAN_RECONNECT 1
/*
* Use datagrams.
*/
- struct timeval timeout;
+ int timeout;
fd_set dsmask;
struct sockaddr_in from;
socklen_t fromlen;
/*
* Wait for reply
*/
- timeout.tv_sec = (_res.retrans << try);
+ timeout = (_res.retrans << try) * 1000;
if (try > 0)
- timeout.tv_sec /= _res.nscount;
- if ((long) timeout.tv_sec <= 0)
- timeout.tv_sec = 1;
- timeout.tv_usec = 0;
+ timeout /= _res.nscount;
+ if (timeout <= 0)
+ timeout = 1000;
wait:
if (s < 0 || s >= FD_SETSIZE) {
Perror(stderr, "s out-of-bounds", EMFILE);
res_close();
goto next_ns;
}
- FD_ZERO(&dsmask);
- FD_SET(s, &dsmask);
- n = select(s+1, &dsmask, (fd_set *)NULL,
- (fd_set *)NULL, &timeout);
+ pfd[0].fd = s;
+ pfd[0].events = POLLIN;
+ n = __poll(pfd, 1, timeout);
if (n < 0) {
if (errno == EINTR)
goto wait;
- Perror(stderr, "select", errno);
+ Perror(stderr, "poll", errno);
res_close();
goto next_ns;
}