增加对于recv接口返回值进行判断
时间: 2024-11-09 21:28:46 浏览: 5
VB API高级教程.rar
在 C 语言中,`recv` 函数用于从套接字接收数据。为了确保程序的稳定性,我们需要对它的返回值进行检查,因为返回值不仅表示是否成功收到数据,还包含了一些关于操作结果的信息。下面是增加对 `recv` 返回值判断的例子:
```c
// 定义接收缓冲区和最大接收长度
char buffer[MAX_BUFFER_SIZE];
size_t len = sizeof(buffer);
// 确保有足够的空间接收数据
if (len > remaining_data_length) {
len = remaining_data_length; // 设置实际接收长度为剩余的数据量
}
// 使用循环持续尝试接收,直到接收完成或遇到错误
ssize_t result;
do {
result = recv(socket, buffer + received_bytes, len, flags);
if (result == 0) { // 如果返回 0,表示连接关闭
printf("Connection closed by peer.\n");
break;
} else if (result > 0) { // 成功接收数据
received_bytes += result; // 更新已接收的字节数
} else if (result == -1 && errno != EAGAIN) { // 如果返回 -1 并非暂时无法读取(EAGAIN)
perror("Error reading from socket: ");
break;
}
} while(result > 0); // 检查是否还有未读完的数据
阅读全文