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