【Mini 型 http 服务器】—— int get_line(int sock, char *buf, int size);
作用:
逐行读取并返回读取的内容长度,取出读取的内容保存在 buf 数组中
输入:
int sock:需要读取的 sock 套接字
char *buf:用于记录保存读取的内容
int size:buf 的大小
返回值:
-1 表示 读取出错
=0 表示 读到一个空行
>0 表示 成功读取一行
函数接口实现:
int get_line(int sock, char *buf, int size){int count = 0;char ch = '\0';int len = 0;while( (count<size - 1) && ch!='\n'){len = read(sock, &ch, 1);if(len == 1){if(ch == '\r'){continue;}else if(ch == '\n'){//buf[count] = '\0';break;}//这里处理一般的字符buf[count] = ch;count++;}else if( len == -1 ){//读取出错perror("read failed");count = -1;break;}else {// read 返回0,客户端关闭sock 连接.fprintf(stderr, "client close.\n");count = -1;break;}}if(count >= 0) buf[count] = '\0';return count; }