use socketCreateExAuto and socketClientExAuto

multi_ipaddr
YuQing 2019-09-29 21:46:57 +08:00
parent 14edb44071
commit 4af6511d3f
7 changed files with 90 additions and 310 deletions

View File

@ -1,4 +1,8 @@
Version 5.13 2019-09-29
* use socketCreateExAuto and socketClientExAuto exported by libfastcommon,
you must upgrade libfastcommon to V1.41 or later
Version 5.12 2018-06-07
* code refine for rare case
* replace print format OFF_PRINTF_FORMAT to PRId64

View File

@ -141,40 +141,14 @@ int storage_get_my_tracker_client_ip()
memcpy(pTServer, pGlobalServer, sizeof(ConnectionInfo));
for (i=0; i < 3; i++)
{
pTServer->sock = socket(AF_INET, SOCK_STREAM, 0);
if(pTServer->sock < 0)
{
result = errno != 0 ? errno : EPERM;
logError("file: "__FILE__", line: %d, " \
"socket create failed, errno: %d, " \
"error info: %s.", \
__LINE__, result, STRERROR(result));
sleep(5);
pTServer->sock = socketClientExAuto(pTServer->ip_addr,
pTServer->port, g_fdfs_connect_timeout, O_NONBLOCK,
g_client_bind_addr ? g_bind_addr : NULL, &result);
if (pTServer->sock >= 0)
{
break;
}
}
if (g_client_bind_addr && *g_bind_addr != '\0')
{
socketBind(pTServer->sock, g_bind_addr, 0);
}
if (tcpsetnonblockopt(pTServer->sock) != 0)
{
close(pTServer->sock);
pTServer->sock = -1;
sleep(5);
continue;
}
if ((result=connectserverbyip_nb(pTServer->sock, \
pTServer->ip_addr, pTServer->port, \
g_fdfs_connect_timeout)) == 0)
{
break;
}
close(pTServer->sock);
pTServer->sock = -1;
sleep(5);
}
@ -258,40 +232,14 @@ static int storage_report_storage_ip_addr()
memcpy(pTServer, pGlobalServer, sizeof(ConnectionInfo));
for (i=0; i < 3; i++)
{
pTServer->sock = socket(AF_INET, SOCK_STREAM, 0);
if(pTServer->sock < 0)
{
result = errno != 0 ? errno : EPERM;
logError("file: "__FILE__", line: %d, " \
"socket create failed, errno: %d, " \
"error info: %s.", \
__LINE__, result, STRERROR(result));
sleep(5);
pTServer->sock = socketClientExAuto(pTServer->ip_addr,
pTServer->port, g_fdfs_connect_timeout, O_NONBLOCK,
g_client_bind_addr ? g_bind_addr : NULL, &result);
if (pTServer->sock >= 0)
{
break;
}
}
if (g_client_bind_addr && *g_bind_addr != '\0')
{
socketBind(pTServer->sock, g_bind_addr, 0);
}
if (tcpsetnonblockopt(pTServer->sock) != 0)
{
close(pTServer->sock);
pTServer->sock = -1;
sleep(1);
continue;
}
if ((result=connectserverbyip_nb(pTServer->sock, \
pTServer->ip_addr, pTServer->port, \
g_fdfs_connect_timeout)) == 0)
{
break;
}
close(pTServer->sock);
pTServer->sock = -1;
sleep(1);
}
@ -351,40 +299,14 @@ int storage_changelog_req()
memcpy(pTServer, pGlobalServer, sizeof(ConnectionInfo));
for (i=0; i < 3; i++)
{
pTServer->sock = socket(AF_INET, SOCK_STREAM, 0);
if(pTServer->sock < 0)
{
result = errno != 0 ? errno : EPERM;
logError("file: "__FILE__", line: %d, " \
"socket create failed, errno: %d, " \
"error info: %s.", \
__LINE__, result, STRERROR(result));
sleep(5);
pTServer->sock = socketClientExAuto(pTServer->ip_addr,
pTServer->port, g_fdfs_connect_timeout, O_NONBLOCK,
g_client_bind_addr ? g_bind_addr : NULL, &result);
if (pTServer->sock >= 0)
{
break;
}
}
if (g_client_bind_addr && *g_bind_addr != '\0')
{
socketBind(pTServer->sock, g_bind_addr, 0);
}
if (tcpsetnonblockopt(pTServer->sock) != 0)
{
close(pTServer->sock);
pTServer->sock = -1;
sleep(1);
continue;
}
if ((result=connectserverbyip_nb(pTServer->sock, \
pTServer->ip_addr, pTServer->port, \
g_fdfs_connect_timeout)) == 0)
{
break;
}
close(pTServer->sock);
pTServer->sock = -1;
sleep(1);
}

View File

@ -1677,53 +1677,19 @@ int storage_report_storage_status(const char *storage_id, \
memcpy(pTServer, pGlobalServer, sizeof(ConnectionInfo));
for (i=0; i < 3; i++)
{
pTServer->sock = socket(AF_INET, SOCK_STREAM, 0);
if(pTServer->sock < 0)
{
result = errno != 0 ? errno : EPERM;
logError("file: "__FILE__", line: %d, " \
"socket create failed, errno: %d, " \
"error info: %s.", \
__LINE__, result, STRERROR(result));
sleep(5);
pTServer->sock = socketClientExAuto(pTServer->ip_addr,
pTServer->port, g_fdfs_connect_timeout, O_NONBLOCK,
g_client_bind_addr ? g_bind_addr : NULL, &result);
if (pTServer->sock >= 0)
{
break;
}
}
if (g_client_bind_addr && *g_bind_addr != '\0')
{
socketBind(pTServer->sock, g_bind_addr, 0);
}
tcpsetserveropt(pTServer->sock, g_fdfs_network_timeout);
if (tcpsetnonblockopt(pTServer->sock) != 0)
{
close(pTServer->sock);
pTServer->sock = -1;
sleep(5);
continue;
}
if ((result=connectserverbyip_nb(pTServer->sock, \
pTServer->ip_addr, pTServer->port, \
g_fdfs_connect_timeout)) == 0)
{
break;
}
close(pTServer->sock);
pTServer->sock = -1;
sleep(5);
}
if (pTServer->sock < 0)
{
logError("file: "__FILE__", line: %d, " \
"connect to tracker server %s:%d fail, " \
"errno: %d, error info: %s", \
__LINE__, pTServer->ip_addr, pTServer->port, \
result, STRERROR(result));
continue;
}
@ -1753,7 +1719,6 @@ static int storage_reader_sync_init_req(StorageBinLogReader *pReader)
ConnectionInfo *pTServerEnd;
char tracker_client_ip[IP_ADDRESS_SIZE];
int result;
int conn_ret;
if (!g_sync_old_done)
{
@ -1801,44 +1766,13 @@ static int storage_reader_sync_init_req(StorageBinLogReader *pReader)
{
while (g_continue_flag)
{
pTServer->sock = socket(AF_INET, SOCK_STREAM, 0);
if(pTServer->sock < 0)
{
logCrit("file: "__FILE__", line: %d, " \
"socket create failed, errno: %d, " \
"error info: %s. program exit!", \
__LINE__, errno, STRERROR(errno));
g_continue_flag = false;
result = errno != 0 ? errno : EPERM;
pTServer->sock = socketClientExAuto(pTServer->ip_addr,
pTServer->port, g_fdfs_connect_timeout, O_NONBLOCK,
g_client_bind_addr ? g_bind_addr : NULL, &result);
if (pTServer->sock >= 0)
{
break;
}
if (g_client_bind_addr && *g_bind_addr != '\0')
{
socketBind(pTServer->sock, g_bind_addr, 0);
}
if (tcpsetnonblockopt(pTServer->sock) != 0)
{
close(pTServer->sock);
sleep(g_heart_beat_interval);
continue;
}
if ((conn_ret=connectserverbyip_nb(pTServer->sock, \
pTServer->ip_addr, pTServer->port, \
g_fdfs_connect_timeout)) == 0)
{
break;
}
logError("file: "__FILE__", line: %d, " \
"connect to tracker server %s:%d fail, " \
"errno: %d, error info: %s", \
__LINE__, pTServer->ip_addr, pTServer->port, \
conn_ret, STRERROR(conn_ret));
close(pTServer->sock);
}
pTServer++;
if (pTServer >= pTServerEnd)
@ -2685,36 +2619,20 @@ static void* storage_sync_thread_entrance(void* arg)
pStorage->status != FDFS_STORAGE_STATUS_NONE)
{
strcpy(storage_server.ip_addr, pStorage->ip_addr);
storage_server.sock = \
socket(AF_INET, SOCK_STREAM, 0);
if(storage_server.sock < 0)
{
logCrit("file: "__FILE__", line: %d," \
" socket create fail, " \
"errno: %d, error info: %s. " \
"program exit!", __LINE__, \
errno, STRERROR(errno));
storage_server.sock = socketCreateExAuto(pStorage->ip_addr,
g_fdfs_connect_timeout, O_NONBLOCK,
g_client_bind_addr ? g_bind_addr : NULL, &result);
if (storage_server.sock < 0)
{
logCrit("file: "__FILE__", line: %d, "
"socket create fail, program exit!", __LINE__);
g_continue_flag = false;
break;
}
}
if (g_client_bind_addr && *g_bind_addr != '\0')
{
socketBind(storage_server.sock, g_bind_addr, 0);
}
if (tcpsetnonblockopt(storage_server.sock) != 0)
{
nContinuousFail++;
close(storage_server.sock);
storage_server.sock = -1;
sleep(1);
continue;
}
if ((conn_result=connectserverbyip_nb(storage_server.sock,\
pStorage->ip_addr, g_server_port, \
if ((conn_result=connectserverbyip_nb(storage_server.sock,
pStorage->ip_addr, g_server_port,
g_fdfs_connect_timeout)) == 0)
{
char szFailPrompt[64];

View File

@ -240,34 +240,22 @@ static void *tracker_report_thread_entrance(void *arg)
{
close(pTrackerServer->sock);
}
pTrackerServer->sock = socket(AF_INET, SOCK_STREAM, 0);
if(pTrackerServer->sock < 0)
{
logCrit("file: "__FILE__", line: %d, " \
"socket create failed, errno: %d, " \
"error info: %s. program exit!", \
__LINE__, errno, STRERROR(errno));
g_continue_flag = false;
break;
}
if (g_client_bind_addr && *g_bind_addr != '\0')
{
socketBind(pTrackerServer->sock, g_bind_addr, 0);
}
pTrackerServer->sock = socketCreateExAuto(pTrackerServer->ip_addr,
g_fdfs_connect_timeout, O_NONBLOCK,
g_client_bind_addr ? g_bind_addr : NULL, &result);
if (pTrackerServer->sock < 0)
{
logCrit("file: "__FILE__", line: %d, "
"socket create fail, program exit!", __LINE__);
g_continue_flag = false;
break;
}
tcpsetserveropt(pTrackerServer->sock, g_fdfs_network_timeout);
tcpsetserveropt(pTrackerServer->sock, g_fdfs_network_timeout);
if (tcpsetnonblockopt(pTrackerServer->sock) != 0)
{
nContinuousFail++;
sleep(g_heart_beat_interval);
continue;
}
if ((result=connectserverbyip_nb(pTrackerServer->sock, \
pTrackerServer->ip_addr, \
pTrackerServer->port, g_fdfs_connect_timeout)) != 0)
if ((result=connectserverbyip_nb(pTrackerServer->sock,
pTrackerServer->ip_addr, pTrackerServer->port,
g_fdfs_connect_timeout)) != 0)
{
if (previousCode != result)
{

View File

@ -1444,36 +1444,19 @@ static void* trunk_sync_thread_entrance(void* arg)
pStorage->status != FDFS_STORAGE_STATUS_NONE)
{
strcpy(storage_server.ip_addr, pStorage->ip_addr);
storage_server.sock = \
socket(AF_INET, SOCK_STREAM, 0);
if(storage_server.sock < 0)
{
logCrit("file: "__FILE__", line: %d," \
" socket create fail, " \
"errno: %d, error info: %s. " \
"program exit!", __LINE__, \
errno, STRERROR(errno));
storage_server.sock = socketCreateExAuto(pStorage->ip_addr,
g_fdfs_connect_timeout, O_NONBLOCK,
g_client_bind_addr ? g_bind_addr : NULL, &result);
if (storage_server.sock < 0)
{
logCrit("file: "__FILE__", line: %d, "
"socket create fail, program exit!", __LINE__);
g_continue_flag = false;
break;
}
}
if (g_client_bind_addr && *g_bind_addr != '\0')
{
socketBind(storage_server.sock, g_bind_addr, 0);
}
if (tcpsetnonblockopt(storage_server.sock) != 0)
{
nContinuousFail++;
close(storage_server.sock);
storage_server.sock = -1;
sleep(1);
continue;
}
if ((conn_result=connectserverbyip_nb(storage_server.sock,\
pStorage->ip_addr, g_server_port, \
if ((conn_result=connectserverbyip_nb(storage_server.sock,
pStorage->ip_addr, g_server_port,
g_fdfs_connect_timeout)) == 0)
{
char szFailPrompt[64];

View File

@ -64,23 +64,13 @@ static void *http_check_entrance(void *arg)
{
if (g_http_check_type == FDFS_HTTP_CHECK_ALIVE_TYPE_TCP)
{
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0)
{
result = errno != 0 ? errno : EPERM;
logError("file: "__FILE__", line: %d, " \
"socket create failed, errno: %d, " \
"error info: %s.", \
__LINE__, result, STRERROR(result));
sleep(1);
continue;
}
result = connectserverbyip_nb_auto(sock, \
(*ppServer)->ip_addr, \
(*ppGroup)->storage_http_port, \
g_fdfs_connect_timeout);
close(sock);
sock = socketClientAuto((*ppServer)->ip_addr,
(*ppGroup)->storage_http_port,
g_fdfs_connect_timeout, O_NONBLOCK, &result);
if (sock >= 0)
{
close(sock);
}
if (g_http_servers_dirty)
{

View File

@ -539,6 +539,11 @@ int fdfs_get_ini_context_from_tracker(TrackerServerGroup *pTrackerGroup, \
pServerStart = pTrackerGroup->servers;
}
if (!client_bind_addr)
{
bind_addr = NULL;
}
do
{
for (pGlobalServer=pServerStart; pGlobalServer<pServerEnd; \
@ -547,52 +552,19 @@ int fdfs_get_ini_context_from_tracker(TrackerServerGroup *pTrackerGroup, \
memcpy(pTServer, pGlobalServer, sizeof(ConnectionInfo));
for (i=0; i < 3; i++)
{
pTServer->sock = socket(AF_INET, SOCK_STREAM, 0);
if(pTServer->sock < 0)
{
result = errno != 0 ? errno : EPERM;
logError("file: "__FILE__", line: %d, " \
"socket create failed, errno: %d, " \
"error info: %s.", \
__LINE__, result, STRERROR(result));
sleep(5);
pTServer->sock = socketClientExAuto(pTServer->ip_addr,
pTServer->port, g_fdfs_connect_timeout,
O_NONBLOCK, bind_addr, &result);
if (pTServer->sock >= 0)
{
break;
}
}
if (client_bind_addr && (bind_addr != NULL && \
*bind_addr != '\0'))
{
socketBind(pTServer->sock, bind_addr, 0);
}
if (tcpsetnonblockopt(pTServer->sock) != 0)
{
close(pTServer->sock);
pTServer->sock = -1;
sleep(1);
continue;
}
if ((result=connectserverbyip_nb(pTServer->sock, \
pTServer->ip_addr, pTServer->port, \
g_fdfs_connect_timeout)) == 0)
{
break;
}
close(pTServer->sock);
pTServer->sock = -1;
sleep(1);
}
if (pTServer->sock < 0)
{
logError("file: "__FILE__", line: %d, " \
"connect to tracker server %s:%d fail, " \
"errno: %d, error info: %s", \
__LINE__, pTServer->ip_addr, pTServer->port, \
result, STRERROR(result));
continue;
}
@ -606,6 +578,9 @@ int fdfs_get_ini_context_from_tracker(TrackerServerGroup *pTrackerGroup, \
return result;
}
logError("file: "__FILE__", line: %d, "
"get parameters from tracker server %s:%d fail",
__LINE__, pTServer->ip_addr, pTServer->port);
fdfs_quit(pTServer);
close(pTServer->sock);
sleep(1);