|
@@ -190,7 +190,7 @@ struct sock_client:fd_io,client_ex
|
|
|
char *m_b{0};
|
|
|
int m_clen{0};
|
|
|
int m_size{1<<16};
|
|
|
- int m_max_package_size{4096};
|
|
|
+ int m_max_package_size{2048};
|
|
|
|
|
|
ev::timer m_recv_timer;
|
|
|
ev::timer m_sync_timer;
|
|
@@ -392,30 +392,49 @@ struct sock_client:fd_io,client_ex
|
|
|
if(read_clt()<0)
|
|
|
return -1;
|
|
|
|
|
|
- int msg_len;
|
|
|
- for(;m_clen>=2;)
|
|
|
+ try
|
|
|
{
|
|
|
- msg_len=calc_length((uint8_t*)m_b)+2;
|
|
|
+ int msg_len;
|
|
|
+ for(;m_clen>=2;)
|
|
|
+ {
|
|
|
+ msg_len=calc_length((uint8_t*)m_b)+2;
|
|
|
|
|
|
- if(msg_len>m_max_package_size)
|
|
|
- return -1;
|
|
|
+ if(msg_len>m_max_package_size)
|
|
|
+ {
|
|
|
+ logn_error(1,"package too big:%d/%d,close socket. site=%s.",msg_len,m_max_package_size,m_name.c_str());
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
|
|
|
- if(m_clen<msg_len)
|
|
|
- break;
|
|
|
+ if(msg_len<=8)
|
|
|
+ {
|
|
|
+ logn_error(1,"package too small:%d,close socket. site=%s.",msg_len,m_name.c_str());
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
|
|
|
- logn_bin(1,name().c_str(),m_b,msg_len);//输出二进制日志
|
|
|
- if(check_crc(m_b,msg_len))
|
|
|
- {
|
|
|
- on_message(m_b,msg_len);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- logn_error(1,"check_crc_error,close socket. site=%s.",m_name.c_str());
|
|
|
- return -1;
|
|
|
- }
|
|
|
|
|
|
- memmove(m_b,&m_b[msg_len],m_clen-msg_len);
|
|
|
- m_clen-=msg_len;
|
|
|
+
|
|
|
+ if(m_clen<msg_len)
|
|
|
+ break;
|
|
|
+
|
|
|
+ logn_bin(1,name().c_str(),m_b,msg_len);//输出二进制日志
|
|
|
+ if(check_crc(m_b,msg_len))
|
|
|
+ {
|
|
|
+ on_message(m_b,msg_len);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ logn_error(1,"check_crc_error,close socket. site=%s.",m_name.c_str());
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ memmove(m_b,&m_b[msg_len],m_clen-msg_len);
|
|
|
+ m_clen-=msg_len;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch(const std::exception&e)
|
|
|
+ {
|
|
|
+ logn_error(1,"package error,close socket. site=%s,err_info=%s",m_name.c_str(),e.what());
|
|
|
+ return -1;
|
|
|
}
|
|
|
|
|
|
return 0;
|