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 <kc_memory.h>
 #include <kc_socket.h>
 
+#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;