#
# This is a simple MySQL lisener that opens a listening socket on port $port and forwards
# all queries to a DBI handle. This allows any DBI driver to be made accessible to ODBC clients via
# the MySQL ODBC driver
# Please note that this example accepts only one connection at a time, which may be a problem for applications
# that open multiple connections or forget to close existing ones. If you create a fork()-ing server, please
# do not forget to clone() your DBI handles before passing them to DBIx::MyParse->new()
#
use strict;
use Socket;
use DBIx::MyServer::DBI;
my $port = '23306';
socket(SERVER_SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
setsockopt(SERVER_SOCK, SOL_SOCKET, SO_REUSEADDR, pack("l", 1));
bind(SERVER_SOCK, sockaddr_in($port, INADDR_ANY)) || die "bind: $!";
listen(SERVER_SOCK,1);
while (1) {
my $remote_paddr = accept(my $remote_socket, SERVER_SOCK);
my $dbh = DBI->connect("DBI:mysql:");
my $myserver = DBIx::MyServer::DBI->new(
socket => $remote_socket,
dbh => $dbh,
banner => $dbh->get_info($DBI::Const::GetInfoType::GetInfoType{SQL_DBMS_VER})
);
last if not defined $myserver->handshake();
while () {
my $result = $myserver->processCommand();
print localtime()." [$$] Query: $result\n";
last if not defined $result;
};
}