mirror of
https://github.com/wangyu-/UDPspeeder.git
synced 2025-01-19 06:19:34 +08:00
just commit
This commit is contained in:
parent
3790eaf67e
commit
bf121f6f73
@ -15,13 +15,18 @@ const int disable_conn_clear=0;//a raw connection is called conn.
|
|||||||
|
|
||||||
conn_manager_t conn_manager;
|
conn_manager_t conn_manager;
|
||||||
|
|
||||||
void server_clear_function(u64_t u64);
|
void server_clear_function(u64_t u64)//used in conv_manager in server mode.for server we have to use one udp fd for one conv(udp connection),
|
||||||
|
//so we have to close the fd when conv expires
|
||||||
|
{
|
||||||
|
int fd64=u64;
|
||||||
|
assert(fd_manager.exist(fd64));
|
||||||
|
fd_manager.close(fd64);
|
||||||
|
}
|
||||||
|
|
||||||
conv_manager_t::conv_manager_t()
|
conv_manager_t::conv_manager_t()
|
||||||
{
|
{
|
||||||
clear_it=conv_last_active_time.begin();
|
clear_it=conv_last_active_time.begin();
|
||||||
long long last_clear_time=0;
|
long long last_clear_time=0;
|
||||||
//clear_function=0;
|
|
||||||
}
|
}
|
||||||
conv_manager_t::~conv_manager_t()
|
conv_manager_t::~conv_manager_t()
|
||||||
{
|
{
|
||||||
@ -85,7 +90,7 @@ conv_manager_t::~conv_manager_t()
|
|||||||
{
|
{
|
||||||
return conv_last_active_time[conv]=get_current_time();
|
return conv_last_active_time[conv]=get_current_time();
|
||||||
}
|
}
|
||||||
int conv_manager_t::insert_conv(u32_t conv,u64_t u64)
|
int conv_manager_t::insert_conv(u32_t conv,u64_t u64)//////todo add capacity
|
||||||
{
|
{
|
||||||
u64_to_conv[u64]=conv;
|
u64_to_conv[u64]=conv;
|
||||||
conv_to_u64[conv]=u64;
|
conv_to_u64[conv]=u64;
|
||||||
@ -118,7 +123,6 @@ conv_manager_t::~conv_manager_t()
|
|||||||
{
|
{
|
||||||
if(disable_conv_clear) return 0;
|
if(disable_conv_clear) return 0;
|
||||||
|
|
||||||
|
|
||||||
//map<uint32_t,uint64_t>::iterator it;
|
//map<uint32_t,uint64_t>::iterator it;
|
||||||
int cnt=0;
|
int cnt=0;
|
||||||
it=clear_it;
|
it=clear_it;
|
||||||
@ -189,7 +193,8 @@ conv_manager_t::~conv_manager_t()
|
|||||||
mp[u64];
|
mp[u64];
|
||||||
return 0;
|
return 0;
|
||||||
}*/
|
}*/
|
||||||
conn_info_t *& conn_manager_t::find_insert_p(ip_port_t ip_port) //be aware,the adress may change after rehash
|
conn_info_t *& conn_manager_t::find_insert_p(ip_port_t ip_port) //todo capacity
|
||||||
|
//be aware,the adress may change after rehash
|
||||||
{
|
{
|
||||||
u64_t u64=ip_port.to_u64();
|
u64_t u64=ip_port.to_u64();
|
||||||
unordered_map<u64_t,conn_info_t*>::iterator it=mp.find(u64);
|
unordered_map<u64_t,conn_info_t*>::iterator it=mp.find(u64);
|
||||||
@ -305,14 +310,3 @@ int conn_manager_t::clear_inactive0()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void server_clear_function(u64_t u64)//used in conv_manager in server mode.for server we have to use one udp fd for one conv(udp connection),
|
|
||||||
//so we have to close the fd when conv expires
|
|
||||||
{
|
|
||||||
int fd64=u64;
|
|
||||||
int ret;
|
|
||||||
assert(fd_manager.exist(fd64));
|
|
||||||
int fd=fd_manager.to_fd(fd64);
|
|
||||||
|
|
||||||
fd_manager.close(fd64);
|
|
||||||
}
|
|
||||||
|
@ -36,11 +36,9 @@ struct conv_manager_t // manage the udp connections
|
|||||||
//typedef hash_map map;
|
//typedef hash_map map;
|
||||||
unordered_map<u64_t,u32_t> u64_to_conv; //conv and u64 are both supposed to be uniq
|
unordered_map<u64_t,u32_t> u64_to_conv; //conv and u64 are both supposed to be uniq
|
||||||
unordered_map<u32_t,u64_t> conv_to_u64;
|
unordered_map<u32_t,u64_t> conv_to_u64;
|
||||||
|
|
||||||
unordered_map<u32_t,u64_t> conv_last_active_time;
|
unordered_map<u32_t,u64_t> conv_last_active_time;
|
||||||
|
|
||||||
unordered_map<u32_t,u64_t>::iterator clear_it;
|
unordered_map<u32_t,u64_t>::iterator clear_it;
|
||||||
|
|
||||||
unordered_map<u32_t,u64_t>::iterator it;
|
unordered_map<u32_t,u64_t>::iterator it;
|
||||||
unordered_map<u32_t,u64_t>::iterator old_it;
|
unordered_map<u32_t,u64_t>::iterator old_it;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
|
|
||||||
struct fd_manager_t //conver fd to a uniq 64bit number,avoid fd value conflict caused by close and re-create
|
struct fd_manager_t //conver fd to a uniq 64bit number,avoid fd value conflict caused by close and re-create
|
||||||
//not used currently
|
//this class is not strictly necessary,it just makes epoll fd handling easier
|
||||||
{
|
{
|
||||||
fd_info_t & get_info(fd64_t fd64);
|
fd_info_t & get_info(fd64_t fd64);
|
||||||
int exist_info(fd64_t);
|
int exist_info(fd64_t);
|
||||||
|
10
main.cpp
10
main.cpp
@ -210,13 +210,14 @@ int client_event_loop()
|
|||||||
dest.conv=conv;
|
dest.conv=conv;
|
||||||
my_send(dest,data,data_len);
|
my_send(dest,data,data_len);
|
||||||
}
|
}
|
||||||
else if (events[idx].data.u64 == remote_fd64)
|
else if(events[idx].data.u64>u32_t(-1) )
|
||||||
{
|
{
|
||||||
char data[buf_len];
|
char data[buf_len];
|
||||||
if(!fd_manager.exist(remote_fd64)) //fd64 has been closed
|
if(!fd_manager.exist(events[idx].data.u64)) //fd64 has been closed
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
assert(events[idx].data.u64==remote_fd64);
|
||||||
int fd=fd_manager.to_fd(remote_fd64);
|
int fd=fd_manager.to_fd(remote_fd64);
|
||||||
int data_len =recv(fd,data,max_data_len,0);
|
int data_len =recv(fd,data,max_data_len,0);
|
||||||
mylog(log_trace, "received data from udp fd %d, len=%d\n", remote_fd,data_len);
|
mylog(log_trace, "received data from udp fd %d, len=%d\n", remote_fd,data_len);
|
||||||
@ -258,11 +259,6 @@ int client_event_loop()
|
|||||||
mylog(log_trace,"epoll_trigger_counter: %d \n",epoll_trigger_counter);
|
mylog(log_trace,"epoll_trigger_counter: %d \n",epoll_trigger_counter);
|
||||||
epoll_trigger_counter=0;
|
epoll_trigger_counter=0;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
else if(events[idx].data.u64>u32_t(-1) )
|
|
||||||
{
|
|
||||||
assert(!fd_manager.exist(events[idx].data.u64));//this fd64 has been closed
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mylog(log_fatal,"unknown fd,this should never happen\n");
|
mylog(log_fatal,"unknown fd,this should never happen\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user