Damjan Jovanovic : icmp: Changed select to poll.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Nov 6 05:48:45 CST 2006


Module: wine
Branch: master
Commit: 0cc74835b9ec45cdcfc49eb4f98e4621e04dc21a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0cc74835b9ec45cdcfc49eb4f98e4621e04dc21a

Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date:   Mon Nov  6 08:29:27 2006 +0200

icmp: Changed select to poll.

---

 dlls/icmp/icmp_main.c |   25 ++++++++++---------------
 1 files changed, 10 insertions(+), 15 deletions(-)

diff --git a/dlls/icmp/icmp_main.c b/dlls/icmp/icmp_main.c
index b463a82..31bd0c1 100644
--- a/dlls/icmp/icmp_main.c
+++ b/dlls/icmp/icmp_main.c
@@ -61,6 +61,9 @@ #endif
 #ifdef HAVE_ARPA_INET_H
 # include <arpa/inet.h>
 #endif
+#ifdef HAVE_SYS_POLL_H
+# include <sys/poll.h>
+#endif
 
 #include "windef.h"
 #include "winbase.h"
@@ -209,8 +212,7 @@ DWORD WINAPI IcmpSendEcho(
     char* endbuf;
     int ip_header_len;
     int maxlen;
-    fd_set fdr;
-    struct timeval timeout;
+    struct pollfd fdr;
     DWORD send_time,recv_time;
     struct sockaddr_in addr;
     unsigned int addrlen;
@@ -291,10 +293,8 @@ DWORD WINAPI IcmpSendEcho(
     /* Get ready for receiving the reply
      * Do it before we send the request to minimize the risk of introducing delays
      */
-    FD_ZERO(&fdr);
-    FD_SET(icp->sid,&fdr);
-    timeout.tv_sec=Timeout/1000;
-    timeout.tv_usec=(Timeout % 1000)*1000;
+    fdr.fd = icp->sid;
+    fdr.events = POLLIN;
     addrlen=sizeof(addr);
     ier=ReplyBuffer;
     ip_header=(struct ip *) ((char *) ReplyBuffer+sizeof(ICMP_ECHO_REPLY));
@@ -338,7 +338,7 @@ #endif
 
     /* Get the reply */
     ip_header_len=0; /* because gcc was complaining */
-    while ((res=select(icp->sid+1,&fdr,NULL,NULL,&timeout))>0) {
+    while ((res=poll(&fdr,1,Timeout))>0) {
         recv_time = GetTickCount();
         res=recvfrom(icp->sid, (char*)ip_header, maxlen, 0, (struct sockaddr*)&addr,&addrlen);
         TRACE("received %d bytes from %s\n",res, inet_ntoa(addr.sin_addr));
@@ -433,10 +433,8 @@ #endif
              * Decrease the timeout so that we don't enter an endless loop even
              * if we get flooded with ICMP packets that are not for us.
              */
-            int t = Timeout - (recv_time - send_time);
-            if (t < 0) t = 0;
-            timeout.tv_sec = t / 1000;
-            timeout.tv_usec = (t % 1000) * 1000;
+            Timeout -= (recv_time - send_time);
+            if (Timeout < 0) Timeout = 0;
             continue;
         } else {
             /* This is a reply to our packet */
@@ -467,11 +465,8 @@ #endif
             maxlen=endbuf-(char*)ip_header;
 
             /* Check out whether there is more but don't wait this time */
-            timeout.tv_sec=0;
-            timeout.tv_usec=0;
+            Timeout=0;
         }
-        FD_ZERO(&fdr);
-        FD_SET(icp->sid,&fdr);
     }
     res=ier-(ICMP_ECHO_REPLY*)ReplyBuffer;
     if (res==0)




More information about the wine-cvs mailing list