code adjust for pull request #6

use_iouring
YuQing 2023-11-23 16:16:00 +08:00
parent 0e1fcdafce
commit 5618afabbb
1 changed files with 32 additions and 22 deletions

View File

@ -350,22 +350,28 @@ int sf_socket_create_server(SFListener *listener,
{
int result;
// 如果bind_addr未设置
if (strlen(bind_addr) == 0) {
if (af == AF_UNSPEC) {
if (bind_addr == NULL || *bind_addr == '\0') {
// 如果当前服务不存在IPv4地址但是存在IPv6地址则自动绑定IPv6地址
if (!checkHostHasIPv4Addr() && checkHostHasIPv6Addr()) {
listener->sock = socketServerIPv6(bind_addr, port, &result);
listener->sock = socketServerIPv6(bind_addr,
listener->port, &result);
} else {
listener->sock = socketServer(bind_addr, port, &result);
listener->sock = socketServer(bind_addr,
listener->port, &result);
}
} else if (is_ipv6_addr(bind_addr)) // 通过判断IP地址是IPv4或者IPv6根据结果进行初始化
{
listener->sock = socketServerIPv6(bind_addr, port, &result);
} else if (is_ipv6_addr(bind_addr)) {
listener->sock = socketServerIPv6(bind_addr,
listener->port, &result);
} else {
listener->sock = socketServer(bind_addr, port, &result);
listener->sock = socketServer(bind_addr,
listener->port, &result);
}
} else {
listener->sock = socketServer2(af, bind_addr,
listener->port, &result);
}
// listener->sock = socketServer2(af, bind_addr, listener->port, &result);
if (listener->sock < 0) {
return result;
}
@ -380,7 +386,7 @@ int sf_socket_create_server(SFListener *listener,
int sf_socket_server_ex(SFContext *sf_context)
{
int result;
int af = AF_INET;
int af = AF_UNSPEC;
bool dual_ports;
const char *bind_addr;
SFNetworkHandler *handler;
@ -858,13 +864,16 @@ void sf_set_sig_quit_handler(sf_sig_quit_handler quit_handler)
}
// 判断当前服务器是否存在IPv4地址
bool checkHostHasIPv4Addr(){
bool checkHostHasIPv4Addr()
{
struct ifaddrs *ifaddr, *ifa;
bool hasIPv4;
if (getifaddrs(&ifaddr) == -1) {
return false;
}
bool hasIPv4 = false;
hasIPv4 = false;
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
if (ifa->ifa_addr == NULL) {
continue;
@ -879,18 +888,20 @@ bool checkHostHasIPv4Addr(){
}
freeifaddrs(ifaddr);
return hasIPv4;
}
// 判断当前服务器是否存在IPv6地址
bool checkHostHasIPv6Addr(){
bool checkHostHasIPv6Addr()
{
struct ifaddrs *ifaddr, *ifa;
bool hasIPv6;
if (getifaddrs(&ifaddr) == -1) {
return false;
}
bool hasIPv6 = false;
hasIPv6 = false;
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
if (ifa->ifa_addr == NULL) {
continue;
@ -905,6 +916,5 @@ bool checkHostHasIPv6Addr(){
}
freeifaddrs(ifaddr);
return hasIPv6;
}