libevent2 tcp 服务端口状态TIMEWAIT过多

奕诚 2016-10-20 07:34:36
http://blog.csdn.net/su_787910081/article/details/41945717
参考这篇文章写的一个tcp服务,其实也是libevent 源码里的例子。
tcp服务端是长连接,客户端是短连接,性能测试(不到100并发)互相发包时,用netstat 查看通讯端口状态时,发现TIMEWAIT过多,一直在飙涨...
tcp服务端是在判断recv为0或者在 libevent 的异常处理回调函数里 判断 if (events & BEV_EVENT_EOF) 才断开的连接。
然后压力测试就会产生一些 network error 异常,暂时不确定是否是 TIMEWAIT过多 影响的。
tcp服务端要是改短连接就不会出现这种情况。------->用的旧版libevent 改的短连接
请问libevent 2能改为短连接吗?或者如何解决那个 TIMEWAIT过多 的问题。
求各位网络编程大神们各抒己见,看看如何解决,谢谢。
...全文
487 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-21
  • 打赏
  • 举报
回复
换Linux ?
奕诚 2016-10-21
  • 打赏
  • 举报
回复
引用 1 楼 eastfriendwu 的回复:
出现TIMEWAIT,说明服务器执行主动关闭。 根据你的描述,服务器接收recv 为零0关闭,这是被动关闭,不会出现TIMEWAIT;那问题出在了异常情况下的主动关闭?
谢谢你的回复,libevent异常处理回调函数里我也加了日志输出的,可是没有发现异常日志.
static void conn_eventcb( struct bufferevent *bev, short events , void *user_data)  
{  
    if (events & BEV_EVENT_EOF)  
    {  
        printf("Connection closed.\n" );  
    }  
    else if (events & BEV_EVENT_ERROR)  
    {  
        printf("Got an error on the connection: %s\n" ,  
            strerror(errno ));/*XXX win32*/  
    }  
    /* None of the other events can happen here, since we haven't enabled 
    * timeouts */  
    bufferevent_free(bev );  
}  
奕诚 2016-10-21
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
换Linux ?
平台换不了哈。 客户端是在Linux平台的,tcp服务端是windows平台应用程序,谢谢
eastfriendwu 2016-10-20
  • 打赏
  • 举报
回复
出现TIMEWAIT,说明服务器执行主动关闭。
根据你的描述,服务器接收recv 为零0关闭,这是被动关闭,不会出现TIMEWAIT;那问题出在了异常情况下的主动关闭?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧