CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

多线程端口调用出了问题,帮忙看看为什么

楼主zzndino(为什么)2006-03-08 16:10:55 在 Linux/Unix社区 / 程序开发区 提问

我写了程序如下:  
   
   
  #include   <netinet/in.h>  
  #include   <sys/socket.h>  
  #include   <sys/wait.h>  
  #define     time_wait   10  
  typedef   struct   _p_data  
  {  
                  int   socket;  
                  char   message[100];  
  }pthread_data;  
   
  int   i=0;  
  int   nthreads=10;  
  void   *t_process(void   *arg)  
  {  
                  int   connsock;  
                  char   buff[]={"Hello!   Welcome   to   here!"};  
   
                  connsock=(*arg).socket;  
                  send(connsock,buff,sizeof(buff),   0);  
                  sleep(time_wait);  
                  shutdown(connsock,2);  
                  close(connsock);  
                  i--;  
                  //return   NULL;  
  }  
   
  int   main(int   argc,char   *argv[])  
  {  
                  pthread_t   *threadptr;  
                  int   listensock,connsock;  
                  pthread_data*   arg;  
                  struct   sockaddr_in   serveraddr;  
                  //const   char   buff[]   =   "Hello!   Welcome   to   here!";    
                  listensock   =   socket(AF_INET,SOCK_STREAM,0);  
                  bzero(&serveraddr,sizeof(struct   sockaddr));  
                  serveraddr.sin_family   =   AF_INET;  
                  serveraddr.sin_addr.s_addr   =   htonl(INADDR_ANY);  
                  serveraddr.sin_port   =   htons(5000);  
                  bind(listensock,(struct   sockaddr   *)&serveraddr,sizeof(serveraddr));  
   
                  listen(listensock,1024);  
                  arg=(pthread_data*)malloc(sizeof(pthread_data));  
                  memset(arg,   0,   sizeof(pthread_data));  
                  threadptr=(pthread_t*)malloc(sizeof(pthread_t)*nthreads);  
                  while(1)  
                  {  
                                  connsock   =   accept(listensock,(struct   sockaddr   *)NULL,   NULL);  
                                  if   (connsock   <   0   )  
                                  {  
                                                  sleep(1);  
                                                  continue;  
                                  }else  
                                  {  
  thread_full:  
                                                  if(i<nthreads)  
                                                  {  
                                                                  i++;  
                                                  }else  
                                                  {  
                                                                  fprintf(stdout,   "thread   full,   waiting...   ...\n");  
                                                                  sleep(time_wait);  
                                                                  goto   thread_full;  
                                                  }  
                                                  arg->socket=connsock;  
                                                  if(pthread_create(&threadptr[i],   NULL,*t_process,   (void*)arg)   !=   0)  
                                                  {  
                                                                  fprintf(stderr,   "cant   create   threads\n");  
                                                  }  
                                                  pthread_join(threadptr[i],   NULL);  
                                  }  
                  }  
   
  }  
   
   
  编译后报错:  
  first.c:23:   warning:   dereferencing   `void   *'   pointer  
  first.c:23:   error:   request   for   member   `socket'   in   something   not   a   structure   or   union  
  make:   ***   [server]   Error   1  
  请高手指教错误何在?多谢!!! 问题点数:20、回复次数:3Top

1 楼fierygnu(va_list)回复于 2006-03-08 16:31:59 得分 5

connsock=(*arg).socket;  
  arg是void*类型,不能用*arg取值。Top

2 楼Mybox(卡卡西)回复于 2006-03-08 16:33:37 得分 15

char   buff[]={"Hello!   Welcome   to   here!"};  
   
                  connsock=(*arg).socket;  
   
  这个改一下,改成下面的:  
  pthread_data   *pData   =   (pthread_data   *)arg;  
  connsock   =   pData->socket;  
  Top

3 楼zzndino(为什么)回复于 2006-03-08 16:53:18 得分 0

帅哥们,太感谢了,我现在结贴,但是我打算用signal来完成信号传递。希望你们能继续关注,给我一些指导。多谢!!!Top

相关问题

  • 多线程调用组件
  • 为什么在多线程里创建 COM 显示“尚未调用CoInitialize”错误?
  • 为什么多线程调用不成?wwwunix和blh快来看啊!!
  • win2000中的多线程调用
  • 多线程中调用dll的问题。
  • 多线程导致fopen()调用阻塞???
  • 多线程调用COM的问题,急!
  • 多线程监听端口的问题
  • 在多线程调用 端口扫描中,如何处理 N个IP+N个Port的情况?我的笨方法是一个ip+端口 启动一个线程但总不能一次启动1千以上个线程运转的
  • 多线程,为什么总死机?

关键词

  • socket
  • null
  • connsock
  • serveraddr
  • pthread
  • threadptr
  • listensock
  • buff
  • arg
  • sin

得分解答快速导航

  • 帖主:zzndino
  • fierygnu
  • Mybox

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo