1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
diff -Naur snmplib.orig/snmpUDPDomain.c snmplib/snmpUDPDomain.c
--- snmplib.orig/snmpUDPDomain.c 2007-10-11 22:46:30.000000000 +0200
+++ snmplib/snmpUDPDomain.c 2009-07-10 23:41:37.000000000 +0200
@@ -65,6 +65,12 @@
#define INADDR_NONE -1
#endif
+#ifdef MSG_DONTWAIT
+#define NETSNMP_DONTWAIT MSG_DONTWAIT
+#else
+#define NETSNMP_DONTWAIT 0
+#endif
+
static netsnmp_tdomain udpDomain;
typedef struct netsnmp_udp_addr_pair_s {
@@ -104,12 +110,12 @@
char tmp[64];
to = (struct sockaddr_in *) &(addr_pair->remote_addr);
if (to == NULL) {
- sprintf(tmp, "UDP: [%s]->unknown",
+ sprintf(tmp, "UDP: unknown->[%s]",
inet_ntoa(addr_pair->local_addr));
} else {
- sprintf(tmp, "UDP: [%s]->", inet_ntoa(addr_pair->local_addr));
- sprintf(tmp + strlen(tmp), "[%s]:%hd",
+ sprintf(tmp, "UDP: [%s]:%hu->",
inet_ntoa(to->sin_addr), ntohs(to->sin_port));
+ sprintf(tmp + strlen(tmp), "[%s]", inet_ntoa(addr_pair->local_addr));
}
return strdup(tmp);
}
@@ -140,7 +146,7 @@
msg.msg_control = &cmsg;
msg.msg_controllen = sizeof(cmsg);
- r = recvmsg(s, &msg, 0);
+ r = recvmsg(s, &msg, NETSNMP_DONTWAIT);
if (r == -1) {
return -1;
@@ -215,7 +221,7 @@
#if defined(linux) && defined(IP_PKTINFO)
rc = netsnmp_udp_recvfrom(t->sock, buf, size, from, &fromlen, &(addr_pair->local_addr));
#else
- rc = recvfrom(t->sock, buf, size, 0, from, &fromlen);
+ rc = recvfrom(t->sock, buf, size, NETSNMP_DONTWAIT, from, &fromlen);
#endif /* linux && IP_PKTINFO */
if (rc < 0 && errno != EINTR) {
break;
|