recv是一个系统调用函数,用于从已连接的套接字或监听套接字中读取数据。它的使用方法如下:
```c
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
```
参数说明:
- sockfd:需要读取数据的套接字描述符。
- buf:存放读取到的数据的缓冲区地址。
- len:缓冲区大小(即要读取多少个字节)。
- flags:可选标志,通常为0。
返回值说明:
成功时返回实际读取到的字节数;失败时返回-1,并设置errno变量来指示错误类型。
示例代码:
```c
char buffer[1024];
int bytes_received = recv(sockfd, buffer, sizeof(buffer), 0);
if (bytes_received == -1) {
perror("recv");
} else {
printf("Received %d bytes: %s\\n", bytes_received, buffer);
}
```
注意事项:
1. 如果在非阻塞模式下调用recv,则可能会立即返回EAGAIN或EWOULDBLOCK错误码。此时应该等待一段时间后再次尝试调用recv函数。
2. 如果对端关闭了连接,则recv将会返回0。