commit
0e1fcdafce
|
|
@ -521,12 +521,13 @@ int sf_connection_manager_init_ex(SFConnectionManager *cm,
|
||||||
connect_done_callback, void *args, FCServerConfig *server_cfg,
|
connect_done_callback, void *args, FCServerConfig *server_cfg,
|
||||||
const bool bg_thread_enabled)
|
const bool bg_thread_enabled)
|
||||||
{
|
{
|
||||||
const int socket_domain = AF_INET;
|
const int socket_domain = AF_UNSPEC;
|
||||||
struct {
|
struct {
|
||||||
ConnectionExtraParams holder;
|
ConnectionExtraParams holder;
|
||||||
ConnectionExtraParams *ptr;
|
ConnectionExtraParams *ptr;
|
||||||
} extra_params;
|
} extra_params;
|
||||||
FCServerGroupInfo *server_group;
|
FCServerGroupInfo *server_group;
|
||||||
|
|
||||||
int htable_init_capacity;
|
int htable_init_capacity;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <ifaddrs.h>
|
||||||
#include "fastcommon/logger.h"
|
#include "fastcommon/logger.h"
|
||||||
#include "fastcommon/sockopt.h"
|
#include "fastcommon/sockopt.h"
|
||||||
#include "fastcommon/shared_func.h"
|
#include "fastcommon/shared_func.h"
|
||||||
|
|
@ -349,7 +350,22 @@ int sf_socket_create_server(SFListener *listener,
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
listener->sock = socketServer2(af, bind_addr, listener->port, &result);
|
// 如果bind_addr未设置
|
||||||
|
if (strlen(bind_addr) == 0) {
|
||||||
|
// 如果当前服务不存在IPv4地址,但是存在IPv6地址,则自动绑定IPv6地址
|
||||||
|
if(!checkHostHasIPv4Addr() && checkHostHasIPv6Addr()){
|
||||||
|
listener->sock = socketServerIPv6(bind_addr, port, &result);
|
||||||
|
}else{
|
||||||
|
listener->sock = socketServer(bind_addr, port, &result);
|
||||||
|
}
|
||||||
|
} else if (is_ipv6_addr(bind_addr)) // 通过判断IP地址是IPv4或者IPv6,根据结果进行初始化
|
||||||
|
{
|
||||||
|
listener->sock = socketServerIPv6(bind_addr, port, &result);
|
||||||
|
}else{
|
||||||
|
listener->sock = socketServer(bind_addr, port, &result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// listener->sock = socketServer2(af, bind_addr, listener->port, &result);
|
||||||
if (listener->sock < 0) {
|
if (listener->sock < 0) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -840,3 +856,55 @@ void sf_set_sig_quit_handler(sf_sig_quit_handler quit_handler)
|
||||||
{
|
{
|
||||||
sig_quit_handler = quit_handler;
|
sig_quit_handler = quit_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 判断当前服务器是否存在IPv4地址
|
||||||
|
bool checkHostHasIPv4Addr(){
|
||||||
|
struct ifaddrs *ifaddr, *ifa;
|
||||||
|
if (getifaddrs(&ifaddr) == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasIPv4 = false;
|
||||||
|
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
|
||||||
|
if (ifa->ifa_addr == NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (strcmp(ifa->ifa_name, "lo") == 0) { // 排除lo接口
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ifa->ifa_addr->sa_family == AF_INET) {
|
||||||
|
hasIPv4 = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
freeifaddrs(ifaddr);
|
||||||
|
|
||||||
|
return hasIPv4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断当前服务器是否存在IPv6地址
|
||||||
|
bool checkHostHasIPv6Addr(){
|
||||||
|
struct ifaddrs *ifaddr, *ifa;
|
||||||
|
if (getifaddrs(&ifaddr) == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasIPv6 = false;
|
||||||
|
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
|
||||||
|
if (ifa->ifa_addr == NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (strcmp(ifa->ifa_name, "lo") == 0) { // 排除lo接口
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (ifa->ifa_addr->sa_family == AF_INET6) {
|
||||||
|
hasIPv6 = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
freeifaddrs(ifaddr);
|
||||||
|
|
||||||
|
return hasIPv6;
|
||||||
|
}
|
||||||
|
|
@ -190,6 +190,12 @@ static inline void sf_release_task(struct fast_task_info *task)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 判断当前服务器是否存在IPv4地址
|
||||||
|
bool checkHostHasIPv4Addr();
|
||||||
|
|
||||||
|
// 判断当前服务器是否存在IPv6地址
|
||||||
|
bool checkHostHasIPv6Addr();
|
||||||
|
|
||||||
static inline SFNetworkHandler *sf_get_first_network_handler_ex(
|
static inline SFNetworkHandler *sf_get_first_network_handler_ex(
|
||||||
SFContext *sf_context)
|
SFContext *sf_context)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
#define SF_RDMACM_NETWORK_HANDLER_INDEX 1
|
#define SF_RDMACM_NETWORK_HANDLER_INDEX 1
|
||||||
|
|
||||||
typedef int (*sf_accept_done_callback)(struct fast_task_info *task,
|
typedef int (*sf_accept_done_callback)(struct fast_task_info *task,
|
||||||
const in_addr_t client_addr, const bool bInnerPort);
|
const in_addr_64_t client_addr, const bool bInnerPort);
|
||||||
typedef int (*sf_set_body_length_callback)(struct fast_task_info *task);
|
typedef int (*sf_set_body_length_callback)(struct fast_task_info *task);
|
||||||
typedef char *(*sf_alloc_recv_buffer_callback)(struct fast_task_info *task,
|
typedef char *(*sf_alloc_recv_buffer_callback)(struct fast_task_info *task,
|
||||||
const int buff_size, bool *new_alloc);
|
const int buff_size, bool *new_alloc);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue