【发布时间】:2011-11-26 18:00:29
【问题描述】:
我需要getline() 来读取我的浏览器发送到我正在编程的网络服务器的请求标头。这是应该执行该任务的 getMessage 函数:
char *getMessage(int fd) {
FILE *sstream = fdopen(fd, "r");
// initialise block to 1 char and set it to null
char *block = malloc(sizeof(char));
*block = '\0';
int size = 1;
// Read from the file descriptor fd (using a FILE stream) until a blank line is
// received.
// Read 100 lines (buffersize) from sstream and put into the buffer. If lines have
// been successfully read concatenate them with block.
int buffersize = 100;
char *buffer = malloc (buffersize + 1);
while(getline(&buffer,&buffersize,sstream) != -1){
int length = strlen(buffer);
printf("Buffer length: %d\n",length);
block = realloc(block,strlen(block)+strlen(buffer)+1);
strcat(block,buffer);
if(strcmp(buffer,"\r\n") == 0) break;
}
int len = strlen(block);
printf("Block length: %d\n", len);
printf("%s \n", block);
return block;
}
getMessage 函数 (fd) 的输入基本上是我在 main 方法中声明的侦听套接字的输入。我已经验证输出是正确的。现在我需要将文件描述符的输出转换为字符串并返回该字符串。但是每次我运行我的服务器时,它都会卡在 while 循环中。不执行循环中的语句。 编辑:添加了一个循环终止条件:现在它立即跳转到“块长度”。 非常感谢您的帮助!
【问题讨论】:
标签: c webserver httprequest getline