summaryrefslogtreecommitdiff
path: root/osdep/Phy.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'osdep/Phy.hpp')
-rw-r--r--osdep/Phy.hpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/osdep/Phy.hpp b/osdep/Phy.hpp
index 1b55e0a6..96a946d1 100644
--- a/osdep/Phy.hpp
+++ b/osdep/Phy.hpp
@@ -724,13 +724,16 @@ public:
case ZT_PHY_SOCKET_UDP:
if (FD_ISSET(s->sock,&rfds)) {
- memset(&ss,0,sizeof(ss));
- socklen_t slen = sizeof(ss);
- long n = (long)::recvfrom(s->sock,buf,sizeof(buf),0,(struct sockaddr *)&ss,&slen);
- if (n > 0) {
- try {
- _datagramHandler((PhySocket *)&(*s),&(s->uptr),(const struct sockaddr *)&ss,(void *)buf,(unsigned long)n);
- } catch ( ... ) {}
+ for(;;) {
+ memset(&ss,0,sizeof(ss));
+ socklen_t slen = sizeof(ss);
+ long n = (long)::recvfrom(s->sock,buf,sizeof(buf),0,(struct sockaddr *)&ss,&slen);
+ if (n > 0) {
+ try {
+ _datagramHandler((PhySocket *)&(*s),&(s->uptr),(const struct sockaddr *)&ss,(void *)buf,(unsigned long)n);
+ } catch ( ... ) {}
+ } else if (n < 0)
+ break;
}
}
break;