diff --git a/config.mk b/config.mk index 5017c77..91965b5 100644 --- a/config.mk +++ b/config.mk @@ -44,7 +44,7 @@ # オプション設定 # ifeq ($(strip $(OS)),windows) -LIBS ?= -lws2_32 +LIBS ?= -liphlpapi -lws2_32 DEBUG_OPTIONS ?= else LIBS ?= -lpthread -lrt diff --git a/config.mk b/config.mk index 5017c77..91965b5 100644 --- a/config.mk +++ b/config.mk @@ -44,7 +44,7 @@ # オプション設定 # ifeq ($(strip $(OS)),windows) -LIBS ?= -lws2_32 +LIBS ?= -liphlpapi -lws2_32 DEBUG_OPTIONS ?= else LIBS ?= -lpthread -lrt diff --git a/modules/src/kc_socket.c b/modules/src/kc_socket.c index f957c05..b77abb6 100644 --- a/modules/src/kc_socket.c +++ b/modules/src/kc_socket.c @@ -13,6 +13,13 @@ #include #include +#if (KC_IS_WINDOWS) +// Windows の setsockopt に指定する値は、様々な型のデータを渡すにもかかわらず、 +// const char* 型と定義されているため、明示的にキャストする。 +#define setsockopt(sockfd, level, optname, optval, optlen) \ + setsockopt(sockfd, level, optname, (const char *)optval, optlen) +#endif // KC_IS_WINDOWS + /** * KcSocket 管理情報 */ @@ -668,15 +675,19 @@ switch (info->sock_family) { case AF_INET: + { unsigned char ttl; ttl = (unsigned char)val; ret = setsockopt(info->sock_fd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)); - break; + } + break; case AF_INET6: + { int hop; hop = val; ret = setsockopt(info->sock_fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &hop, sizeof(hop)); - break; + } + break; default: // unspoorted socket family break;