核心功能就是根据url中的host参数快速得到对应的IP地址,避免在连接时进行dns解析,耗费时间。
/**
* --------------------------------------------------
* | hash | host | ip |
* --------------------------------------------------
* | 0x1234 | www.jiedev.com | 192.168.0.122 |
* | 0x5678 | www.github.com | 192.168.0.123 |
* | xxxxxx | xxxxxxxxxxxxxx | xxx.xxx.x.xxx |
* --------------------------------------------------
*/
typedef struct routing {
uint32_t hash;
char *host;
char *ip;
} routing_t;
static routing_t _routing_table[ROUTING_TABLE_SIZE] = {0};
维护一个路由表,保存了host与ip的关系,路由表的默认大小是ROUTING_TABLE_SIZE,值为10,可由用户修改,路由表的核心就是数组,在实际处理过程中会循环记录,当路由表不足的时候,会选择先缓存的表覆盖掉。
- host与ip关系的记录。
void routing_record(const char* host, const char *ip);
- host与ip关系的搜索。
char *routing_search(const char* host);
- 哈希算法的实现,其中忽略了大小写字母。
static int _routing_to_lower(int c)
static uint32_t _routing_hash(const char* str)
- 匹配算法的实现,依旧是忽略的大小写,它与哈希算法的配合实现了时间复杂度为 O(n+m) 。
static int _routing_match(const char *str, const char *cmd)
上一篇: 平台抽象层—tls加密传输
下一篇: network网卡