connect static method
Connects a MySQL server at the given host
on port
, authenticates using user
and password
and connects to db
.
c.timeout
is used as the connection timeout and the default timeout for all socket
communication.
A SocketException is thrown on connection failure or a socket timeout connecting the socket. A TimeoutException is thrown if there is a timeout in the handshake with the server.
Implementation
static Future<MySqlConnection> connect(ConnectionSettings c,
{bool isUnixSocket = false}) async {
assert(!c.useSSL); // Not implemented
assert(!c.useCompression);
ReqRespConnection? conn;
late Completer handshakeCompleter;
_log.fine('opening connection to ${c.host}:${c.port}/${c.db}');
var socket = await BufferedSocket.connect(c.host, c.port, c.timeout,
isUnixSocket: isUnixSocket, onDataReady: () {
conn?._readPacket();
}, onDone: () {
_log.fine('done');
}, onError: (Object error) {
_log.warning('socket error: $error');
// If conn has not been connected there was a connection error.
if (conn == null) {
handshakeCompleter.completeError(error);
} else {
conn.handleError(error);
}
}, onClosed: () {
if (conn != null) {
conn.handleError(SocketException.closed());
}
});
Handler handler = HandshakeHandler(c.user, c.password, c.maxPacketSize,
c.characterSet, c.db, c.useCompression, c.useSSL);
handshakeCompleter = Completer<void>();
conn =
ReqRespConnection(socket, handler, handshakeCompleter, c.maxPacketSize);
await handshakeCompleter.future.timeout(c.timeout);
return MySqlConnection(c.timeout, conn);
}