mirror of
https://github.com/MariaDB/server.git
synced 2025-08-24 14:48:09 +03:00
aim is to: a) if set_connect_timeout called, timeout connect attempt (for retry on next call) after timeout period b) preserve existing blocking behaviour otherwise (for, e.g. mgmapi) Related to customer issue with long time deleting ndb_cluster_connection object. believe we're hanging on the connect(2) call until timeout (when we then realise we should exit the thread). ndb/include/mgmapi/mgmapi.h: add ndb_mgm_set_connect_timeout ndb/include/util/SocketClient.hpp: add timeout (seconds) for max time to wait for connection ndb/src/common/transporter/Transporter.cpp: set limit on amount of time we'll wait for tcp connect ndb/src/common/util/SocketClient.cpp: only try to connect for a maximum of timeout time ndb/src/mgmapi/mgmapi.cpp: add ndb_mgm_set_connect_timeout
49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
/* Copyright (C) 2003 MySQL AB
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
#ifndef SOCKET_CLIENT_HPP
|
|
#define SOCKET_CLIENT_HPP
|
|
|
|
#include <NdbTCP.h>
|
|
class SocketAuthenticator;
|
|
|
|
class SocketClient
|
|
{
|
|
NDB_SOCKET_TYPE m_sockfd;
|
|
struct sockaddr_in m_servaddr;
|
|
unsigned int m_connect_timeout_sec;
|
|
unsigned short m_port;
|
|
char *m_server_name;
|
|
SocketAuthenticator *m_auth;
|
|
public:
|
|
SocketClient(const char *server_name, unsigned short port, SocketAuthenticator *sa = 0);
|
|
~SocketClient();
|
|
bool init();
|
|
void set_port(unsigned short port) {
|
|
m_port = port;
|
|
m_servaddr.sin_port = htons(m_port);
|
|
};
|
|
void set_connect_timeout(unsigned int s) {
|
|
m_connect_timeout_sec= s;
|
|
}
|
|
unsigned short get_port() { return m_port; };
|
|
char *get_server_name() { return m_server_name; };
|
|
int bind(const char* toaddress, unsigned short toport);
|
|
NDB_SOCKET_TYPE connect(const char* toaddress = 0, unsigned short port = 0);
|
|
bool close();
|
|
};
|
|
|
|
#endif // SOCKET_ClIENT_HPP
|