1
我有一個簡單的路由守護進程,由我自動路由一些包到達我的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;
}
請具體指出失敗的原因。查詢是否成功,但返回一個空集?由於某種原因,C函數是否出錯? –
它是如何失敗的? mysql返回的錯誤是什麼?如果崩潰 - 堆棧跟蹤是什麼? – viraptor
該函數返回0,並在此失敗res = mysql_use_result(conn); – opc0de