mirror of https://github.com/openwrt/packages.git
67 lines
2.0 KiB
Diff
67 lines
2.0 KiB
Diff
From 0cfc04eac370ee33118e17a298d4739c94cacc73 Mon Sep 17 00:00:00 2001
|
|
From: Vladimir Oltean <vladimir.oltean@nxp.com>
|
|
Date: Tue, 19 Apr 2022 12:28:03 +0300
|
|
Subject: [PATCH 1/6] mreceive: refactor multicast joining to separate function
|
|
|
|
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
|
|
---
|
|
mreceive.c | 33 ++++++++++++++++++---------------
|
|
1 file changed, 18 insertions(+), 15 deletions(-)
|
|
|
|
--- a/mreceive.c
|
|
+++ b/mreceive.c
|
|
@@ -61,12 +61,27 @@ Usage: mreceive [-g GROUP] [-p PORT] [-i
|
|
-h Print the command usage.\n\n", VERSION);
|
|
}
|
|
|
|
+static void igmp_join(int s, in_addr_t multiaddr, in_addr_t interface)
|
|
+{
|
|
+ struct ip_mreq mreq;
|
|
+ int ret;
|
|
+
|
|
+ mreq.imr_multiaddr.s_addr = multiaddr;
|
|
+ mreq.imr_interface.s_addr = interface;
|
|
+
|
|
+ ret = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
|
|
+ (char *)&mreq, sizeof(mreq));
|
|
+ if (ret == SOCKET_ERROR) {
|
|
+ printf("setsockopt() IP_ADD_MEMBERSHIP failed.\n");
|
|
+ exit(1);
|
|
+ }
|
|
+}
|
|
+
|
|
int main(int argc, char *argv[])
|
|
{
|
|
struct sockaddr_in stLocal, stFrom;
|
|
unsigned char achIn[BUFSIZE];
|
|
int s, i;
|
|
- struct ip_mreq stMreq;
|
|
int iTmp, iRet;
|
|
int ipnum = 0;
|
|
int ii;
|
|
@@ -153,22 +168,10 @@ int main(int argc, char *argv[])
|
|
|
|
/* join the multicast group. */
|
|
if (!ipnum) { /* single interface */
|
|
- stMreq.imr_multiaddr.s_addr = inet_addr(TEST_ADDR);
|
|
- stMreq.imr_interface.s_addr = INADDR_ANY;
|
|
- iRet = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&stMreq, sizeof(stMreq));
|
|
- if (iRet == SOCKET_ERROR) {
|
|
- printf("setsockopt() IP_ADD_MEMBERSHIP failed.\n");
|
|
- exit(1);
|
|
- }
|
|
+ igmp_join(s, inet_addr(TEST_ADDR), INADDR_ANY);
|
|
} else {
|
|
for (i = 0; i < ipnum; i++) {
|
|
- stMreq.imr_multiaddr.s_addr = inet_addr(TEST_ADDR);
|
|
- stMreq.imr_interface.s_addr = IP[i];
|
|
- iRet = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&stMreq, sizeof(stMreq));
|
|
- if (iRet == SOCKET_ERROR) {
|
|
- printf("setsockopt() IP_ADD_MEMBERSHIP failed.\n");
|
|
- exit(1);
|
|
- }
|
|
+ igmp_join(s, inet_addr(TEST_ADDR), IP[i]);
|
|
}
|
|
}
|
|
|