69,371
社区成员
发帖
与我相关
我的任务
分享
while (1)
{
int client_sockd = 0;
if ((client_sockd=accept(server_sockd, (SKADDR *) &client_addr,
&sock_len)) < 0)
{
perror("accept error ");
close(client_sockd);
sleep(10);
continue ;
}
printf("[%d]CIP:[%s],PORT[%d]\n", ++count, inet_ntoa(client_addr.sin_addr),
ntohs(client_addr.sin_port));
// 给消息结构体赋值,从这里启动消息处理线程
pthread_t tid;
RMSG rmsg;
memset(&rmsg, 0, sizeof (rmsg));
rmsg.cli_sockd = client_sockd;
memcpy(&(rmsg.cli_addr), &client_addr, sizeof (client_addr));
pthread_create(&tid, NULL, server_handle, (void *) &rmsg);
}
void *server_handle(void *args)
{
RMSG *rmsg = (RMSG *) args;
unsigned long tid = pthread_self();
printf("TID[%lu] : SOCK[%d], CIP[%s], PORT[%d]\n", \
tid, \
rmsg->cli_sockd, \
inet_ntoa(rmsg->cli_addr.sin_addr), \
ntohs(rmsg->cli_addr.sin_port));
while(1)
{
char buf[BUFFER_SIZE] = "";
if (recv(rmsg->cli_sockd, buf, BUFFER_SIZE, 0) <= 0)
{
perror("recv error/socket closed ");
break;
}
printf("TID[%lu] : MESSAGE[%s]\n", tid, buf);
}
close(rmsg->cli_sockd);
printf("SOCK[%d] closed....\n", rmsg->cli_sockd); // <-- 这里出问题了。。打印出来的sock是一样的。而且是最后一个连接客户端的socket值
return NULL;
}
close(rmsg->cli_sockd);
printf("SOCK[%d] closed....\n", rmsg->cli_sockd); // <-- 这里出问题了。。打印出来的sock是一样的。而且是最后一个连接客户端的socket值