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;

}
4

1 回答 1

1
    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();
    }

如果 res 为 NULL 你不清理!

于 2013-06-03T15:27:49.590 回答