From 07dd8722dc8863f9b51a43e9801fbbd04e406c35 Mon Sep 17 00:00:00 2001
From: rorschach-py
Date: Sat, 20 Jun 2026 21:41:35 +0800
Subject: [PATCH 1/6] Add multicast helper function
---
base/hsocket.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/base/hsocket.h b/base/hsocket.h
index 4e3c287ca..9a086aba7 100644
--- a/base/hsocket.h
+++ b/base/hsocket.h
@@ -283,6 +283,58 @@ HV_INLINE int so_linger(int sockfd, int timeout DEFAULT(1)) {
#endif
}
+HV_INLINE int udp_multicast_loop(int sockfd, int value DEFAULT(1))
+{
+ return setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, (void *)&value, sizeof(int));
+}
+HV_INLINE int udp_multicast_loop6(int sockfd, int value DEFAULT(1))
+{
+ return setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, (void *)&value, sizeof(int));
+}
+
+HV_INLINE int udp_multicast_ttl(int sockfd, int value)
+{
+ return setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, (void *)&value, sizeof(int));
+}
+HV_INLINE int udp_multicast_ttl6(int sockfd, int value)
+{
+ return setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (void *)&value, sizeof(int));
+}
+
+HV_INLINE int udp_joingroup(int sockfd, const char* group_ip, const char* intf_ip DEFAULT(ANYADDR))
+{
+ struct ip_mreq mreq;
+ inet_pton(AF_INET, group_ip, &mreq.imr_multiaddr);
+ inet_pton(AF_INET, intf_ip, &mreq.imr_interface);
+ return setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void *)&mreq, sizeof(mreq));
+}
+
+HV_INLINE int udp_leavegroup(int sockfd, const char* group_ip, const char* intf_ip DEFAULT(ANYADDR))
+{
+ struct ip_mreq mreq;
+ inet_pton(AF_INET, group_ip, &mreq.imr_multiaddr);
+ inet_pton(AF_INET, intf_ip, &mreq.imr_interface);
+ return setsockopt(sockfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, (void *)&mreq, sizeof(mreq));
+}
+
+// intf_idx 填写字符串整数 为了和ipv4保持一致
+HV_INLINE int udp_joingroup6(int sockfd, const char* group_ip, const char* intf_idx DEFAULT("0"))
+{
+ struct ipv6_mreq mreq;
+ inet_pton(AF_INET6, group_ip, &mreq.ipv6mr_multiaddr);
+ mreq.ipv6mr_interface = atoi(intf_idx);
+ return setsockopt(sockfd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (void *)&mreq, sizeof(mreq));
+}
+
+HV_INLINE int udp_leavegroup6(int sockfd, const char* group_ip, const char* intf_idx DEFAULT("0"))
+{
+ struct ipv6_mreq mreq;
+ inet_pton(AF_INET6, group_ip, &mreq.ipv6mr_multiaddr);
+ mreq.ipv6mr_interface = atoi(intf_idx);
+ return setsockopt(sockfd, IPPROTO_IPV6, IPV6_DROP_MEMBERSHIP, (void *)&mreq, sizeof(mreq));
+}
+
+
END_EXTERN_C
#endif // HV_SOCKET_H_
From 5294336cebff40ee9df8165f660de3b14db3cbcb Mon Sep 17 00:00:00 2001
From: rorschach-py
Date: Sat, 20 Jun 2026 23:27:49 +0800
Subject: [PATCH 2/6] fix void* to const char*
---
base/hsocket.h | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/base/hsocket.h b/base/hsocket.h
index 9a086aba7..e35f0ea2b 100644
--- a/base/hsocket.h
+++ b/base/hsocket.h
@@ -285,20 +285,20 @@ HV_INLINE int so_linger(int sockfd, int timeout DEFAULT(1)) {
HV_INLINE int udp_multicast_loop(int sockfd, int value DEFAULT(1))
{
- return setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, (void *)&value, sizeof(int));
+ return setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, (const char*)&value, sizeof(int));
}
HV_INLINE int udp_multicast_loop6(int sockfd, int value DEFAULT(1))
{
- return setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, (void *)&value, sizeof(int));
+ return setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, (const char*)&value, sizeof(int));
}
HV_INLINE int udp_multicast_ttl(int sockfd, int value)
{
- return setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, (void *)&value, sizeof(int));
+ return setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, (const char*)&value, sizeof(int));
}
HV_INLINE int udp_multicast_ttl6(int sockfd, int value)
{
- return setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (void *)&value, sizeof(int));
+ return setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (const char*)&value, sizeof(int));
}
HV_INLINE int udp_joingroup(int sockfd, const char* group_ip, const char* intf_ip DEFAULT(ANYADDR))
@@ -306,7 +306,7 @@ HV_INLINE int udp_joingroup(int sockfd, const char* group_ip, const char* intf_i
struct ip_mreq mreq;
inet_pton(AF_INET, group_ip, &mreq.imr_multiaddr);
inet_pton(AF_INET, intf_ip, &mreq.imr_interface);
- return setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void *)&mreq, sizeof(mreq));
+ return setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const char*)&mreq, sizeof(mreq));
}
HV_INLINE int udp_leavegroup(int sockfd, const char* group_ip, const char* intf_ip DEFAULT(ANYADDR))
@@ -314,7 +314,7 @@ HV_INLINE int udp_leavegroup(int sockfd, const char* group_ip, const char* intf_
struct ip_mreq mreq;
inet_pton(AF_INET, group_ip, &mreq.imr_multiaddr);
inet_pton(AF_INET, intf_ip, &mreq.imr_interface);
- return setsockopt(sockfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, (void *)&mreq, sizeof(mreq));
+ return setsockopt(sockfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, (const char*)&mreq, sizeof(mreq));
}
// intf_idx 填写字符串整数 为了和ipv4保持一致
@@ -323,7 +323,7 @@ HV_INLINE int udp_joingroup6(int sockfd, const char* group_ip, const char* intf_
struct ipv6_mreq mreq;
inet_pton(AF_INET6, group_ip, &mreq.ipv6mr_multiaddr);
mreq.ipv6mr_interface = atoi(intf_idx);
- return setsockopt(sockfd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (void *)&mreq, sizeof(mreq));
+ return setsockopt(sockfd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (const char*)&mreq, sizeof(mreq));
}
HV_INLINE int udp_leavegroup6(int sockfd, const char* group_ip, const char* intf_idx DEFAULT("0"))
@@ -331,7 +331,7 @@ HV_INLINE int udp_leavegroup6(int sockfd, const char* group_ip, const char* intf
struct ipv6_mreq mreq;
inet_pton(AF_INET6, group_ip, &mreq.ipv6mr_multiaddr);
mreq.ipv6mr_interface = atoi(intf_idx);
- return setsockopt(sockfd, IPPROTO_IPV6, IPV6_DROP_MEMBERSHIP, (void *)&mreq, sizeof(mreq));
+ return setsockopt(sockfd, IPPROTO_IPV6, IPV6_DROP_MEMBERSHIP, (const char*)&mreq, sizeof(mreq));
}
From ff7ec72e2cbe6160def325ac1bc73beefa114d26 Mon Sep 17 00:00:00 2001
From: rorschach-py
Date: Sat, 20 Jun 2026 23:32:47 +0800
Subject: [PATCH 3/6] new file: text.txt
---
text.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 text.txt
diff --git a/text.txt b/text.txt
new file mode 100644
index 000000000..37bcc8b8c
--- /dev/null
+++ b/text.txt
@@ -0,0 +1 @@
+1
From 1365aecf8f50486bde9d83fb665b5553565b8e95 Mon Sep 17 00:00:00 2001
From: rorschach-py
Date: Sat, 20 Jun 2026 23:34:45 +0800
Subject: [PATCH 4/6] deleted: text.txt
---
text.txt | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 text.txt
diff --git a/text.txt b/text.txt
deleted file mode 100644
index 37bcc8b8c..000000000
--- a/text.txt
+++ /dev/null
@@ -1 +0,0 @@
-1
From 6c6c7592dfbc46d9cd3148c71efe34ab24332589 Mon Sep 17 00:00:00 2001
From: rorschach-py
Date: Sat, 20 Jun 2026 23:42:00 +0800
Subject: [PATCH 5/6] Revert " deleted: text.txt"
This reverts commit 1365aecf8f50486bde9d83fb665b5553565b8e95.
---
text.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 text.txt
diff --git a/text.txt b/text.txt
new file mode 100644
index 000000000..37bcc8b8c
--- /dev/null
+++ b/text.txt
@@ -0,0 +1 @@
+1
From 8346de870fb36258e9dedb39c5d597ab53dac897 Mon Sep 17 00:00:00 2001
From: rorschach-py
Date: Sat, 20 Jun 2026 23:42:15 +0800
Subject: [PATCH 6/6] Revert " new file: text.txt"
This reverts commit ff7ec72e2cbe6160def325ac1bc73beefa114d26.
---
text.txt | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 text.txt
diff --git a/text.txt b/text.txt
deleted file mode 100644
index 37bcc8b8c..000000000
--- a/text.txt
+++ /dev/null
@@ -1 +0,0 @@
-1