优化:
添加主要处理函数Processing_IP_addresses(src_ip); 数据处理放到cache.c 暂时未发现Bug
This commit is contained in:
89
cache.c
89
cache.c
@@ -1,5 +1,94 @@
|
||||
#include "cache.h"
|
||||
|
||||
|
||||
struct ip_cache_node *ip_cache_head = NULL; // 缓存链表的头节点
|
||||
int cache_size = 0; // 当前缓存中的 IP 数量
|
||||
|
||||
// 将新 IP 添加到缓存,若缓存过大则移除最早的 IP
|
||||
void add_ip_to_cache(const char *ip)
|
||||
{
|
||||
// 如果缓存大小超过限制,移除最早的 IP
|
||||
if (cache_size >= MAX_CACHE_SIZE) {
|
||||
struct ip_cache_node *current = ip_cache_head;
|
||||
struct ip_cache_node *prev = NULL;
|
||||
|
||||
// 找到链表的最后一个节点
|
||||
while (current->next != NULL) {
|
||||
prev = current;
|
||||
current = current->next;
|
||||
}
|
||||
|
||||
// 移除最后一个节点(最早的 IP)
|
||||
if (prev != NULL) {
|
||||
prev->next = NULL;
|
||||
} else {
|
||||
ip_cache_head = NULL;
|
||||
}
|
||||
free(current);
|
||||
cache_size--;
|
||||
}
|
||||
|
||||
// 创建新的缓存节点并添加到链表头部
|
||||
struct ip_cache_node *new_node = (struct ip_cache_node *)malloc(sizeof(struct ip_cache_node));
|
||||
if (new_node == NULL) {
|
||||
perror("malloc");
|
||||
return;
|
||||
}
|
||||
strncpy(new_node->ip, ip, INET_ADDRSTRLEN);
|
||||
new_node->timestamp = time(NULL); // 记录当前时间
|
||||
new_node->next = ip_cache_head;
|
||||
ip_cache_head = new_node;
|
||||
cache_size++;
|
||||
}
|
||||
|
||||
// 检查 IP 是否已在缓存中并是否过期
|
||||
int is_ip_in_cache(const char *ip)
|
||||
{
|
||||
time_t now = time(NULL); // 获取当前时间
|
||||
struct ip_cache_node *current = ip_cache_head;
|
||||
struct ip_cache_node *prev = NULL;
|
||||
|
||||
while (current != NULL) {
|
||||
// 如果 IP 匹配并且未过期
|
||||
if (strcmp(current->ip, ip) == 0) {
|
||||
if (now - current->timestamp <= CACHE_TTL) {
|
||||
return 1; // IP 在缓存中,且未过期
|
||||
} else {
|
||||
// 如果过期,从链表中移除这个节点
|
||||
if (prev == NULL) {
|
||||
ip_cache_head = current->next;
|
||||
} else {
|
||||
prev->next = current->next;
|
||||
}
|
||||
|
||||
free(current);
|
||||
cache_size--;
|
||||
return 0; // IP 过期,不再缓存
|
||||
}
|
||||
}
|
||||
|
||||
prev = current;
|
||||
current = current->next;
|
||||
}
|
||||
return 0; // IP 不在缓存中
|
||||
}
|
||||
|
||||
// 清理缓存链表,释放所有节点的内存
|
||||
void free_ip_cache()
|
||||
{
|
||||
struct ip_cache_node *current = ip_cache_head;
|
||||
while (current != NULL) {
|
||||
struct ip_cache_node *next = current->next;
|
||||
free(current);
|
||||
current = next;
|
||||
}
|
||||
|
||||
ip_cache_head = NULL;
|
||||
cache_size = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
char cn_ip[MAXIPSET_][MAXIPLEN] = { 0 };
|
||||
|
||||
// 添加一个 IP 到集合(如果已存在则不添加)
|
||||
|
||||
Reference in New Issue
Block a user