linuxC 多线程socket中的段异常有关问题
linuxC 多线程socket中的段错误问题
这是服务器端的程序
[code=C/C++][/code] while(1)
{
//通过accopt接受客户端的连接请求,并返回连接套借字
conn_fd = accept(sock_fd,
(struct sockaddr *)&cli_addr, &cli_len);
printf("---------------------\n");
printf("accept a new client,ip: %s\n",
inet_ntoa(cli_addr.sin_addr));
//创建一个子进程处理刚刚接受的连接请
pthread_attr_t child_thread_attr;
pthread_attr_init(&child_thread_attr);
pthread_attr_setdetachstate(&child_thread_attr,PTHREAD_CREATE_DETACHED);
if(pthread_create(&thid,&child_thread_attr,dispose_function ,conn_fd) != 0)
{
printf("thread creation failed!");
}
}
printf("123456");
return 0;
}
服务器端接收两个客户端请求,第一个可以运行出正常结果,第二个程序出现段错误(吐核)导致整个程序的停止
这是为什么?
刚刚学linux编程~希望大家多多指教
------解决方案--------------------
lz注意下,
1.进程和线程是不一样的..进程用fork
2.是lz把线程函数贴出来最好
3.控制线程只创建了一个子线程,也就是说只能连接一个人,第二个人来的时候.就没法连接上
这是服务器端的程序
[code=C/C++][/code] while(1)
{
//通过accopt接受客户端的连接请求,并返回连接套借字
conn_fd = accept(sock_fd,
(struct sockaddr *)&cli_addr, &cli_len);
printf("---------------------\n");
printf("accept a new client,ip: %s\n",
inet_ntoa(cli_addr.sin_addr));
//创建一个子进程处理刚刚接受的连接请
pthread_attr_t child_thread_attr;
pthread_attr_init(&child_thread_attr);
pthread_attr_setdetachstate(&child_thread_attr,PTHREAD_CREATE_DETACHED);
if(pthread_create(&thid,&child_thread_attr,dispose_function ,conn_fd) != 0)
{
printf("thread creation failed!");
}
}
printf("123456");
return 0;
}
服务器端接收两个客户端请求,第一个可以运行出正常结果,第二个程序出现段错误(吐核)导致整个程序的停止
这是为什么?
刚刚学linux编程~希望大家多多指教
------解决方案--------------------
lz注意下,
1.进程和线程是不一样的..进程用fork
2.是lz把线程函数贴出来最好
3.控制线程只创建了一个子线程,也就是说只能连接一个人,第二个人来的时候.就没法连接上
- C/C++ code
while(1){ clientSk = accept(); //创建线程 sleep(); }
------解决方案--------------------
int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);
看清回调函数原型, 注意conn_fd是个哪个函数栈上的, 注意是传入副本还是引用.