gpt4 book ai didi

c - 错误 VgTs_WaitSys 在 Valgrind 中意味着什么?

转载 作者:太空狗 更新时间:2023-10-29 15:41:19 25 4
gpt4 key购买 nike

我有一个用 C 语言编写的服务器,它会在新客户端连接时生成一个新线程。为了测试我的服务器,我编写了一个模拟 500 个客户端的脚本。服务器处理前几百个客户端,最后我从 Valgrind 收到以下错误:

Thread 456: status = VgTs_WaitSys
==4182== at 0x4E383EC: recv (recv.c:34)
==4182== by 0x4017F1: process_data (socket2.h:45)
==4182== by 0x40195E: thread (FBServer.c:82)
==4182== by 0x4E30A03: start_thread (pthread_create.c:300)
==4182== by 0x532DD4C: clone (clone.S:112)

Thread 457: status = VgTs_WaitSys
==4182== at 0x4E383EC: recv (recv.c:34)
==4182== by 0x4017F1: process_data (socket2.h:45)
==4182== by 0x40195E: thread (FBServer.c:82)
==4182== by 0x4E30A03: start_thread (pthread_create.c:300)
==4182== by 0x532DD4C: clone (clone.S:112)

...

Thread 499: status = VgTs_WaitSys
==4182== at 0x4E383EC: recv (recv.c:34)
==4182== by 0x4017F1: process_data (socket2.h:45)
==4182== by 0x40195E: thread (FBServer.c:82)
==4182== by 0x4E30A03: start_thread (pthread_create.c:300)
==4182== by 0x532DD4C: clone (clone.S:112)

在 FBServer.c 的第 82 行,线程调用了一个名为 process_data 的函数,该函数从客户端接收数据。函数process_data如下所示:

void process_data(int clientSock)
{
size_t n;
char jstring[MAX_LEN + 1];
int bytes_received_so_far = 0;
int bytes_count;
char *buf = NULL;

while(bytes_count = recv(clientSock, jstring, MAX_LEN, 0))
{
if(bytes_count <= 0)
{
close(clientSock);
pthread_exit(NULL);
}

printf("Bytes received = %d\n", bytes_count);
jstring[bytes_count] = '\0';

...
...
}
}

谁能帮我解释错误信息。

最佳答案

您使用的是哪个版本的 Valgrind?

关于我在源代码中能找到的唯一评论是:

VgTs_WaitSys,/* 等待系统调用完成 */

所以它似乎表明该程序只是在系统调用(在您的情况下为 recv)上阻塞。我不确定,但这可能根本不是错误,只是 Valgrind 排除的一些额外信息。

关于c - 错误 VgTs_WaitSys 在 Valgrind 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6993677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com