多线程端口调用出了问题,帮忙看看为什么
我写了程序如下:
#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




