【发布时间】:2021-04-03 12:11:46
【问题描述】:
下午好,stackoverflow。
我尝试根据标准方案制作一个简单的服务器:监听一个端口(listen),然后(accept),然后通过一个单独的进程通过一个带有通过(accept)接收的ID的套接字读取请求并发出对它的回应。
当我阅读 (recv) 时,一切正常。
但我决定提供较大的请求长度并同时进行解析。为此,我制作了一个函数(getsym)。
还有一个问题,不知为何,读完最后一段(长度为 我做了什么来解决这个问题:
0) 我将调试输出放在各处,因此我意识到在阅读请求的最后部分后一切都挂起。 我怀疑问题所在的总数:
-我怀疑问题出在读取调用中 如果有人告诉我该怎么做,我将非常感激。 +1000 的业力。 PS 那就是在单独的进程中读取请求的函数
void getsym_sub (int sockfd)
{
static char local_buf [HTTP_BUF_SIZE + 1] = {}; // Äëÿ áóôåðèçàöèè
static int position = -1; // Ïîçèöèÿ -1 çíà÷èò åùå íè÷åãî íå ÷èòàëè
static int length = 0;
position++;
if (position == length)
{
printf ("\n attempt \n");
length = read (sockfd, &local_buf, HTTP_BUF_SIZE);
printf ("\n %d \n", length);
if (length < 0)
{
printf ("\n error occured \n");
SYM = 0;
return;
}
if (length == 0)
{
printf ("\n endof occured \n");
SYM = 0;
return;
}
local_buf [length] = 0;
}
SYM = local_buf [position];
return;
}
【问题讨论】:
-
Please do not post images of code because they are hard to use. 代码应作为文本直接发布在您的问题中。
-
` { position++; if (位置 == 长度) { printf ("\n 尝试 \n");长度 = 读取 (sockfd, &local_buf, HTTP_BUF_SIZE); printf ("\n %d \n", 长度); if (length
-
代码应该在您的问题中,而不是在 cmets 中。请edit您的问题包含您的代码。
-
好像忘了说它挂在
printf ("\n attempt \n");和`` printf("\n %d \n", length);``` -
@AYAWARRIOR 取决于 HTTP 版本。阅读规格。