c - 如何修复 unix socket 编程中的段错误?
问题描述
我找不到此源代码中发生段错误的位置。
我正在用 C 语言制作 unix http 服务器。使用 pthread 和响应函数(int this code,refered())
我尝试检查缓冲区大小(标题、请求、文件、路径)。并将 pthread 更改为 fork(),但这并不重要。
当我使用我的测试 html 文件时,它运行良好。但它会在意想不到的时候中断。
while (1)
{
new_socket = (int *)malloc(sizeof(int));
if ((*new_socket = accept(create_socket, (struct sockaddr *)&address, &addrlen))==-1){
perror("accept");
exit(1);
}
pthread_create(&tid, NULL, threadfunc, (void*)new_socket);
pthread_detach(tid);
}
这是 main() 中的接受部分。
recv(*new_socket, buffer, 1024, 0);
printf("%s\n", buffer);
strcpy(getPath,basicpath);
strtok(buffer," ");
strcpy(openfilename,strtok(NULL," "));
if(strcmp(openfilename,"/") == 0)
strcpy(openfilename,"/index.html");
strcat(getPath,openfilename);
refered(*new_socket,getPath);
free(vargp);
return NULL;
if(((fd = open(filename, O_RDONLY)) < -1) || (fstat(fd, &filestat) < 0))
{
printf("Error in measuring the size of the file\n");
}
else
sprintf(filesize, "%zd", filestat.st_size);
if((fp = fopen(filename,"r")) == NULL)
{
strcpy (header_buff, "HTTP/1.1 404 Not Found\r\nContent-Length: 0\r\nContent-Type: text/plain\r\nConnection: keep-alive\r\n\r\n");
write (ns, header_buff, strlen(header_buff));
}
else
{
strcpy (header_buff, "HTTP/1.1 200 OK\r\nContent-Length: ");
strcat (header_buff, filesize);
strcat (header_buff, "\r\nContent-Type: */* \r\nConnection: keep-alive\r\n\r\n");
fread (file_buff, sizeof(char), filestat.st_size + 1, fp);
write (ns, header_buff, strlen(header_buff));
write (ns, file_buff, filestat.st_size);
fclose(fp);
}
close(ns);
这是响应部分。
我想找到发生分段错误(核心转储)的位置。
解决方案
推荐阅读
- python - 打印特定类型的金字塔
- python - 字符串未正确附加到列表
- java - 单击按钮上的切换选项卡
- phaser-framework - Phaser 3. 有没有像 this.object.on("pointerhold", () => {}) 这样的事件监听器。我知道“pointerdown”和“pointerup”
- python - 切换到虚拟环境时,Git repo 在 PyCharm 的集成 bash 终端中消失
- javascript - javascript foreach循环按值分组
- python - pandas read_csv 方法繁忙状态
- windows - 服务器无法处理请求:ClassFactory 无法提供请求的类
- node.js - 如何使用angular和nodejs在cloudinary上上传图像并将其他表单数据保存在数据库中
- tensorflow - 在循环中使用 tensorflow 模型进行预测时如何减少内存