当前位置:  技术问答>linux和unix

socket operation on non-socket

    来源: 互联网  发布时间:2016-06-23

    本文导语:  我最近做的一个程序,客户上传文件给服务器 ,服务器对文件进行压缩,然后回传给客户,利用线程池的方法.  现在有个问题,就是我启动单独的客户端,文件收发都很正常.但是当我用shell启动100个客户端的时候,服务器端...

我最近做的一个程序,客户上传文件给服务器 ,服务器对文件进行压缩,然后回传给客户,利用线程池的方法. 
现在有个问题,就是我启动单独的客户端,文件收发都很正常.但是当我用shell启动100个客户端的时候,服务器端一般情况会有95个正常,有2~3个左右出现socket operation on non-socket错误,这个错误出现在第一次receive客户端数据的时候.但是accept函数是正确的,而且在线程中的客户FD和accept的客户FD也是一样的. 
问了下高手,大概有这样几个问题: 
1.丢包,一般连续丢三个包,就可能导致连接不成立.,但是如果在本机测试的话(客户程序和服务器程序都在同一机器上),由于不经过网卡,是不会丢包的. 
2.在服务器上的客户端描述符不正确,但是我通过打印日志,在epoll的epollin处理中接受到的客户FD和传递给线程的FD是一致的.是没有问题的. 
我想问下,除了以上问题,还有没有什么可能性,导致:正常accpet客户连接,但是在recv该客户连接的时候,出现socket operation on non-socket错误. 
代码如下(代码有参考网上的资源)
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
//this program is server which receive client file and zip it ,then send it back 
#define THREAD_MAX 100 

int dealClient(int cliFd); 

//thread paragma 
static int s_thread_para[THREAD_MAX][8]; 
static pthread_t s_thread_tid[THREAD_MAX]; 
pthread_mutex_t s_mutex[THREAD_MAX]; 

static int init_thread_pool(void); 


//thread function 
void *serverThread(void *thread_para); 

void setNonBlock(int fd); 

int main() 

int lisFd; 
struct sockaddr_in serverAddr; 
struct sockaddr_in clientAddr; 

bzero(&serverAddr,sizeof(serverAddr)); 
bzero(&clientAddr,sizeof(clientAddr)); 
serverAddr.sin_family=AF_INET; 
serverAddr.sin_port=htons(3491); 
serverAddr.sin_addr.s_addr=INADDR_ANY; 

printf("Server:Create socketn"); 
if((lisFd=socket(AF_INET,SOCK_STREAM,0))

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • jdk1.3.1的BUG? udp socket on windows2000
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3