我有一个由我制作的简单路由守护程序,女巫会自动路由一些数据包,女巫到达我的 ip 上的其他 ip。守护进程运行良好,但一段时间后,女巫从数据库中检索 ip 的功能失败,我不知道为什么。
这是我的代码:
#include "database.h"
BOOL getip(char * ip,int * port,BOOL serie)
{
MYSQL * conn,mysql;
MYSQL_RES * res;
MYSQL_ROW row;
char * server = "mysqldbhost";
char * user = "mysqluser";
char * pass = "mysqlpass";
char * db = "databasenamehere";
char * query = NULL;
mysql_init(&mysql);
conn = mysql_real_connect(&mysql,server,user,pass,db,0,NULL,0);
if (conn == NULL){
fprintf(stderr,"%s\n",mysql_error(conn));
mysql_close(&mysql);
mysql_library_end();
return false;
}
query = malloc(255);
if (strlen(ip) > 30)
{
fprintf(stderr,"INVALID IP SIZE!");
mysql_close(&mysql);
mysql_close(conn);
mysql_library_end();
return false;
}
if (serie)
sprintf(query,"SELECT client_ip,client_port FROM routing WHERE serie_cartela=\"%s\"",ip);
else
sprintf(query,"SELECT client_ip,client_port FROM routing WHERE cartela_ip=\"%s\"",ip);
if (mysql_query(conn,query)){
free(query);
fprintf(stderr,"%s\n",mysql_error(conn));
mysql_close(&mysql);
mysql_close(conn);
mysql_library_end();
return false;
}
free(query);
res = mysql_use_result(conn);
if (res != NULL)
{
row = mysql_fetch_row(res);
if ((row!=NULL) && (row[0] != NULL) && (row[1] != NULL))
{
strcpy(ip,row[0]);
*port = atoi(row[1]);
mysql_free_result(res);
mysql_close(&mysql);
mysql_close(conn);
mysql_library_end();
return true;
}
mysql_free_result(res);
mysql_close(&mysql);
mysql_close(conn);
mysql_library_end();
}
return false;
}