我正在尝试在C中实现Web服务器。我在循环中使用send命令发送请求的响应。
buf_len = 1;
while (buf_len > 0)
{
buf_len = read(fh, out_buf, BUF_SIZE);
if (buf_len > 0)
{
send(client_s, out_buf, buf_len, 0);
}
}
我应该使用char out_buf[BUF_SIZE]
终止'\0'
的最后一个字符。
此外,当我尝试发送具有相同代码的png文件时,有时我会收到整个图像,有时只收到一半。刷新页面时它会完全加载。
答案 0 :(得分:0)
有关发送功能,请参阅手册页
返回值 成功时,这些调用将返回发送的字符数。出错时,返回-1,并正确设置errno。
因此,它不保证发送buf_len字节,您可以检查返回值。
答案 1 :(得分:0)
正如Hardy上面所说,send不保证发送buf_len字节。因此,其中一种方法是
buf_len = 1;
while (buf_len > 0) {
buf_len = read(fh, out_buf, BUF_SIZE);
if(buf_len < 0) {
perror("read");
exit(1);
}
int sent = 0;
int count = buf_len;
while(count) {
int n = send(client_s, out_buf + sent, count, 0);
count -= n;
sent += n;
}
}
如何定义out_buf?