From a07876cb33eea76a5f9461f66c4a3cc97bfa342e Mon Sep 17 00:00:00 2001 From: fumiama Date: Fri, 7 May 2021 21:26:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ipv6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 ++ server.c | 28 ++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0147d1c..2a442b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,8 @@ if (${isBigEndian}) set ( WORDS_BIGENDIAN 1 ) endif() +#add_definitions(-DLISTEN_ON_IPV6) + add_executable(simple-kanban server.c) add_executable(simple-kanban-client client.c) diff --git a/server.c b/server.c index 4ea157c..e73309a 100644 --- a/server.c +++ b/server.c @@ -23,8 +23,14 @@ #define SETPASS "minamoto" int fd; -socklen_t struct_len = sizeof(struct sockaddr_in); -struct sockaddr_in server_addr; + +#ifdef LISTEN_ON_IPV6 + socklen_t struct_len = sizeof(struct sockaddr_in6); + struct sockaddr_in6 server_addr; +#else + socklen_t struct_len = sizeof(struct sockaddr_in); + struct sockaddr_in server_addr; +#endif char *data_path; char *kanban_path; @@ -71,12 +77,18 @@ int s3_set_data(THREADTIMER *timer); int bind_server(uint16_t port, u_int try_times) { int fail_count = 0; int result = -1; - server_addr.sin_family = AF_INET; - server_addr.sin_port = htons(port); - server_addr.sin_addr.s_addr = INADDR_ANY; - bzero(&(server_addr.sin_zero), 8); - - fd = socket(AF_INET, SOCK_STREAM, 0); + #ifdef LISTEN_ON_IPV6 + server_addr.sin6_family = AF_INET6; + server_addr.sin6_port = htons(port); + bzero(&(server_addr.sin6_addr), sizeof(server_addr.sin6_addr)); + fd = socket(PF_INET6, SOCK_STREAM, 0); + #else + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(port); + server_addr.sin_addr.s_addr = INADDR_ANY; + bzero(&(server_addr.sin_zero), 8); + fd = socket(AF_INET, SOCK_STREAM, 0); + #endif while(!~(result = bind(fd, (struct sockaddr *)&server_addr, struct_len)) && fail_count++ < try_times) sleep(1); if(!~result && fail_count >= try_times) { puts("Bind server failure!");