diff options
author | unknown <sasha@mysql.sashanet.com> | 2001-10-12 09:37:25 -0600 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2001-10-12 09:37:25 -0600 |
commit | a6c58676835f9424a5167a522497f1a20a5f03ee (patch) | |
tree | d203061bcdc7881db97565091caac83f2ac56fd4 /libmysql/manager.c | |
parent | d34950e8d2db7a28c92c5129edc63a11bba0792d (diff) | |
download | mariadb-git-a6c58676835f9424a5167a522497f1a20a5f03ee.tar.gz |
changed manager to use my_net_*
fixed bug in master - unregister slaves when they disconnect
client/mysqlmanagerc.c:
changed default port
include/mysql.h:
use my_net_*
libmysql/manager.c:
use my_net_*
mysql-test/mysql-test-run.sh:
added support for client strace
sql/sql_parse.cc:
unregister slaves on disconnect
sql/sql_repl.cc:
unregister slaves on disconnect
sql/sql_repl.h:
unregister slaves on disconnect
tools/mysqlmanager.c:
changed to use my_net_*
Diffstat (limited to 'libmysql/manager.c')
-rw-r--r-- | libmysql/manager.c | 82 |
1 files changed, 28 insertions, 54 deletions
diff --git a/libmysql/manager.c b/libmysql/manager.c index 2f34f49209c..f1fa73dbcd1 100644 --- a/libmysql/manager.c +++ b/libmysql/manager.c @@ -91,6 +91,7 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con, uint32 ip_addr; char msg_buf[MAX_MYSQL_MANAGER_MSG]; int msg_len; + Vio* vio; if (!host) host="localhost"; @@ -105,13 +106,14 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con, strmov(con->last_error,"Cannot create socket"); goto err; } - if (!(con->vio=vio_new(sock,VIO_TYPE_TCPIP,FALSE))) + if (!(vio=vio_new(sock,VIO_TYPE_TCPIP,FALSE))) { con->last_errno=ENOMEM; strmov(con->last_error,"Cannot create network I/O object"); goto err; } - vio_blocking(con->vio,TRUE); + vio_blocking(vio,TRUE); + my_net_init(&con->net,vio); bzero((char*) &sock_addr,sizeof(sock_addr)); sock_addr.sin_family = AF_INET; if ((int) (ip_addr = inet_addr(host)) != (int) INADDR_NONE) @@ -155,7 +157,7 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con, goto err; } /* read the greating */ - if (vio_read(con->vio,msg_buf,MAX_MYSQL_MANAGER_MSG)<=0) + if (my_net_read(&con->net) == packet_error) { con->last_errno=errno; strmov(con->last_error,"Read error on socket"); @@ -163,19 +165,19 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con, } sprintf(msg_buf,"%-.16s %-.16s\n",user,passwd); msg_len=strlen(msg_buf); - if (vio_write(con->vio,msg_buf,msg_len)!=msg_len) + if (my_net_write(&con->net,msg_buf,msg_len) || net_flush(&con->net)) { - con->last_errno=errno; + con->last_errno=con->net.last_errno; strmov(con->last_error,"Write error on socket"); goto err; } - if (vio_read(con->vio,msg_buf,MAX_MYSQL_MANAGER_MSG)<=0) + if (my_net_read(&con->net) == packet_error) { con->last_errno=errno; strmov(con->last_error,"Read error on socket"); goto err; } - if ((con->cmd_status=atoi(msg_buf)) != MANAGER_OK) + if ((con->cmd_status=atoi(con->net.read_pos)) != MANAGER_OK) { strmov(con->last_error,"Access denied"); goto err; @@ -210,11 +212,7 @@ void STDCALL mysql_manager_close(MYSQL_MANAGER* con) allocated in my_multimalloc() along with con->host, freeing con->hosts frees the whole block */ - if (con->vio) - { - vio_delete(con->vio); - con->vio=0; - } + net_end(&con->net); if (con->free_me) my_free((gptr)con,MYF(0)); } @@ -224,7 +222,7 @@ int STDCALL mysql_manager_command(MYSQL_MANAGER* con,const char* cmd, { if (!cmd_len) cmd_len=strlen(cmd); - if (vio_write(con->vio,(char*)cmd,cmd_len) != cmd_len) + if (my_net_write(&con->net,(char*)cmd,cmd_len) || net_flush(&con->net)) { con->last_errno=errno; strmov(con->last_error,"Write error on socket"); @@ -238,9 +236,9 @@ int STDCALL mysql_manager_fetch_line(MYSQL_MANAGER* con, char* res_buf, int res_buf_size) { char* res_buf_end=res_buf+res_buf_size; - char* net_buf_pos=con->net_buf_pos, *net_buf_end=con->net_data_end; + char* net_buf=con->net.read_pos, *net_buf_end; int res_buf_shift=RES_BUF_SHIFT; - int done=0; + uint num_bytes; if (res_buf_size<RES_BUF_SHIFT) { @@ -249,50 +247,26 @@ int STDCALL mysql_manager_fetch_line(MYSQL_MANAGER* con, char* res_buf, return 1; } - for (;;) + if ((num_bytes=my_net_read(&con->net)) == packet_error) { - for (;net_buf_pos<net_buf_end && res_buf<res_buf_end; - net_buf_pos++,res_buf++) - { - char c=*net_buf_pos; - if (c == '\r') - c=*++net_buf_pos; - if (c == '\n') - { - *res_buf=0; - net_buf_pos++; - done=1; - break; - } - else - *res_buf=*net_buf_pos; - } - if (done || res_buf==res_buf_end) - break; - - if (net_buf_pos == net_buf_end && res_buf<res_buf_end) - { - int num_bytes; - if ((num_bytes=vio_read(con->vio,con->net_buf,con->net_buf_size))<=0) - { - con->last_errno=errno; - strmov(con->last_error,"socket read failed"); - return 1; - } - net_buf_pos=con->net_buf; - net_buf_end=net_buf_pos+num_bytes; - } + con->last_errno=errno; + strmov(con->last_error,"socket read failed"); + return 1; } - con->net_buf_pos=net_buf_pos; - con->net_data_end=net_buf_end; - res_buf=res_buf_end-res_buf_size; - if ((con->eof=(res_buf[3]==' '))) + + net_buf_end=net_buf+num_bytes; + + if ((con->eof=(net_buf[3]==' '))) res_buf_shift--; - res_buf_end-=res_buf_shift; - for (;res_buf<res_buf_end;res_buf++) + net_buf+=res_buf_shift; + res_buf_end[-1]=0; + for (;net_buf<net_buf_end && res_buf < res_buf_end;res_buf++,net_buf++) { - if(!(*res_buf=res_buf[res_buf_shift])) + if((*res_buf=*net_buf) == '\r') + { + *res_buf=0; break; + } } return 0; } |