读书人

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

发布时间: 2012-08-31 12:55:03 作者: rapoo

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

读书人网 >C语言

热点推荐