From 4af6511d3fc985efaf9bf4551ff689111683b495 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Sun, 29 Sep 2019 21:46:57 +0800 Subject: [PATCH] use socketCreateExAuto and socketClientExAuto --- HISTORY | 4 + storage/storage_ip_changed_dealer.c | 114 ++++--------------------- storage/storage_sync.c | 128 +++++----------------------- storage/tracker_client_thread.c | 40 +++------ storage/trunk_mgr/trunk_sync.c | 37 +++----- tracker/tracker_http_check.c | 24 ++---- tracker/tracker_proto.c | 53 +++--------- 7 files changed, 90 insertions(+), 310 deletions(-) diff --git a/HISTORY b/HISTORY index 4af2eed..33677f4 100644 --- a/HISTORY +++ b/HISTORY @@ -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 diff --git a/storage/storage_ip_changed_dealer.c b/storage/storage_ip_changed_dealer.c index ac9efbd..dbf4d7e 100644 --- a/storage/storage_ip_changed_dealer.c +++ b/storage/storage_ip_changed_dealer.c @@ -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); } diff --git a/storage/storage_sync.c b/storage/storage_sync.c index fa5176b..12b8bc9 100644 --- a/storage/storage_sync.c +++ b/storage/storage_sync.c @@ -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]; diff --git a/storage/tracker_client_thread.c b/storage/tracker_client_thread.c index ac14666..7758114 100644 --- a/storage/tracker_client_thread.c +++ b/storage/tracker_client_thread.c @@ -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) { diff --git a/storage/trunk_mgr/trunk_sync.c b/storage/trunk_mgr/trunk_sync.c index 721a3fa..a887d6b 100644 --- a/storage/trunk_mgr/trunk_sync.c +++ b/storage/trunk_mgr/trunk_sync.c @@ -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]; diff --git a/tracker/tracker_http_check.c b/tracker/tracker_http_check.c index b339cb0..a81783b 100644 --- a/tracker/tracker_http_check.c +++ b/tracker/tracker_http_check.c @@ -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) { diff --git a/tracker/tracker_proto.c b/tracker/tracker_proto.c index dea7fca..2baea71 100644 --- a/tracker/tracker_proto.c +++ b/tracker/tracker_proto.c @@ -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; pGlobalServersock = 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);