使用send函数在循环中发送响应

时间:2013-11-01 02:09:10

标签: c webserver

我正在尝试在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文件时,有时我会收到整个图像,有时只收到一半。刷新页面时它会完全加载。

2 个答案:

答案 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?