0

我正在尝试在 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);     
              
            }
          }

我应该终止 by 的最后一个字符 char out_buf[BUF_SIZE]'\0'?此外,当我尝试发送具有相同代码的 png 文件时,有时我会收到整个图像,有时只收到一半。当我刷新页面时它会完全加载。

4

2 回答 2

0

发送功能见手册页

返回值 成功时,这些调用返回发送的字符数。出错时,返回 -1,并适当设置 errno。

所以它不保证buf_len字节被发送出去,你可以检查返回值。

于 2013-11-01T02:26:04.890 回答
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 是如何定义的?

于 2013-11-01T21:52:36.267 回答