首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

linuxC 多线程socket中的段异常有关问题

2012-08-31 
linuxC 多线程socket中的段错误问题这是服务器端的程序[codeC/C++][/code] while(1){//通过accopt接受客

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.控制线程只创建了一个子线程,也就是说只能连接一个人,第二个人来的时候.就没法连接上

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是个哪个函数栈上的, 注意是传入副本还是引用.

热点排行