当前位置: 技术问答>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))
现在有个问题,就是我启动单独的客户端,文件收发都很正常.但是当我用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))