关于tcp服务器无法连接的问题
时间:2010-09-06
来源:互联网
写了一个TCP服务器程序 同时在线一般为400个客户左右
工作大约2个星期后 就会出现客户无法连接的情况,而且越来越严重,程序并没有崩溃。
我应该从什么地方来查找问题呢?
工作大约2个星期后 就会出现客户无法连接的情况,而且越来越严重,程序并没有崩溃。
我应该从什么地方来查找问题呢?
作者: usbzip 发布时间: 2010-09-06
从服务端查,看accept是否正常
作者: hellioncu 发布时间: 2010-09-06
接收部分的代码 不知道哪里会出现问题
while(1)
{
enums = epoll_wait(epollfd, events, listenq, 20);
if (enums == -1)
{
printf("errno=%d,%s\r\n",errno,strerror(errno));
if(errno==EINTR)
{
continue;
}
perror("epoll_wait");
}
else if(enums==0)
{
continue;
}
for (n = 0; n < enums; ++n) {
listen_index=events[n].data.u32;
if (events[n].data.fd == LGWTCPSock) {
Newfd = accept(LGWTCPSock, (struct sockaddr *) &TheirAddr,&len);
if (Newfd < 0) {
perror("accept");
continue;
}
else
{
//printf("recv from: %s:%d, socket:%d enmus:%d\n", inet_ntoa(TheirAddr.sin_addr), ntohs(TheirAddr.sin_port), Newfd,enums);
}
setnonblocking(Newfd);
ev.events = EPOLLIN | EPOLLET;
ev.data.fd = Newfd;
if (epoll_ctl(epollfd, EPOLL_CTL_ADD, Newfd, &ev) < 0) {
fprintf(stderr, " socket '%d' add epoll error! %s\n",Newfd, strerror(errno));
return -1;
}
}
else if(events[n].events & EPOLLIN)
{
for(j=0;j<MAXTHREAD;j++)
{
if(0==s_thread_para[j][0]) break;
}
if(j>MAXTHREAD)
{
LOG4CPLUS_INFO(log.GetLogInstance(),"thread pool is full!\n");
close(Newfd);
continue;
}
pthread_mutex_lock(&mutex);
s_thread_para[j][0]=1;
s_thread_para[j][1]=events[n].data.fd;
pthread_mutex_unlock(&mutex);
pthread_mutex_unlock(s_mutex+j);
}
}
}
while(1)
{
enums = epoll_wait(epollfd, events, listenq, 20);
if (enums == -1)
{
printf("errno=%d,%s\r\n",errno,strerror(errno));
if(errno==EINTR)
{
continue;
}
perror("epoll_wait");
}
else if(enums==0)
{
continue;
}
for (n = 0; n < enums; ++n) {
listen_index=events[n].data.u32;
if (events[n].data.fd == LGWTCPSock) {
Newfd = accept(LGWTCPSock, (struct sockaddr *) &TheirAddr,&len);
if (Newfd < 0) {
perror("accept");
continue;
}
else
{
//printf("recv from: %s:%d, socket:%d enmus:%d\n", inet_ntoa(TheirAddr.sin_addr), ntohs(TheirAddr.sin_port), Newfd,enums);
}
setnonblocking(Newfd);
ev.events = EPOLLIN | EPOLLET;
ev.data.fd = Newfd;
if (epoll_ctl(epollfd, EPOLL_CTL_ADD, Newfd, &ev) < 0) {
fprintf(stderr, " socket '%d' add epoll error! %s\n",Newfd, strerror(errno));
return -1;
}
}
else if(events[n].events & EPOLLIN)
{
for(j=0;j<MAXTHREAD;j++)
{
if(0==s_thread_para[j][0]) break;
}
if(j>MAXTHREAD)
{
LOG4CPLUS_INFO(log.GetLogInstance(),"thread pool is full!\n");
close(Newfd);
continue;
}
pthread_mutex_lock(&mutex);
s_thread_para[j][0]=1;
s_thread_para[j][1]=events[n].data.fd;
pthread_mutex_unlock(&mutex);
pthread_mutex_unlock(s_mutex+j);
}
}
}
作者: usbzip 发布时间: 2010-09-06
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28