| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 850 人关注过本帖
标题:关于linux socket和线程问题
只看楼主 加入收藏
sswin0922
Rank: 2
等 级:论坛游民
帖 子:25
专家分:10
注 册:2008-3-10
收藏
 问题点数:0 回复次数:1 
关于linux socket和线程问题
当我在创建socket之前开启了一个线程,之后每当走到socket的accept函数是就会收到一个SIGSEGV信号。
代码如下:

//创建线程的函数
typedef void*(*thread_function)(void *);

void beginthread(thread_function f, void *arg)
{
  int res;
  pthread_t a_thread;
  pthread_attr_t thread_attr;
  res = pthread_attr_init(&thread_attr);
  if (0 != res) {
    //perror("Create a thread failed");
    exit(1);
  }
  res = pthread_attr_setdetachstate(&thread_attr,
                                    PTHREAD_CREATE_DETACHED);
  if (0 != res) {
    //perror("Create a thread failed");
    exit(1);
  }
  res = pthread_create(&a_thread,
                       &thread_attr,
                       f, arg);
  if (0 != res) {
    //perror("Create a thread failed");
    exit(1);
  }
  (void)pthread_attr_destroy(&thread_attr);
}  


//socket 部分代码

void sock_server::acceptsession()
{
  beginthread(sock_server::checksession, NULL); //开启一个线程

  int result;
  sockaddr_in server_address;
  serv_sockfd = socket(AF_INET, SOCK_STREAM, 0);
  server_address.sin_family = AF_INET;
  server_address.sin_addr.s_addr = htonl(INADDR_ANY);
  server_address.sin_port = htons(serv_port);
  result = bind(serv_sockfd, (sockaddr *)&server_address, sizeof(server_address));
  if (0 != result) {
    printf("Accept session failed\n");
    exit(1);
  }
  listen(serv_sockfd, 5);
  while(serv_close) {
    sockaddr_in client_address;
    socklen_t client_address_length = sizeof(client_address);
    int client_sockfd = accept(serv_sockfd,
                               (sockaddr *)&client_address,
                               &client_address_length);  //收到一个SIGSEGV信号
                               .
                               .
                               .
                               .

如果把开线程的函数去掉就没有问题了, 我就想知道为什么会这样?
搜索更多相关主题的帖子: linux socket 线程 
2009-09-17 12:48
zhddragon
Rank: 5Rank: 5
等 级:职业侠客
帖 子:208
专家分:346
注 册:2009-5-14
收藏
得分:0 
sock_server::checksession函数的代码是什么?

身体是玩命的本钱
2009-09-17 13:19
快速回复:关于linux socket和线程问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033130 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved