|
`recvfrom()`是套接字编程中的一个函数,主要用于从套接字接收数据。这个函数在UDP(用户数据报协议)和RAW套接字中使用得更多,因为在TCP(传输控制协议)中,通常使用`recv()`或`recvmsg()`来 […]
`recvfrom()`是套接字编程中的一个函数,主要用于从套接字接收数据。这个函数在UDP(用户数据报协议)和RAW套接字中使用得更多,因为在TCP(传输控制协议)中,通常使用`recv()`或`recvmsg()`来接收数据。
`recvfrom()`的原型如下:
```c
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
```
参数解释如下:
- `sockfd`:这是已连接或未连接的套接字描述符。
- `buf`:指向缓冲区的指针,用于存储接收到的数据。
- `len`:指定缓冲区的大小。
- `flags`:可以设置一些选项,如`MSG_PEEK`(查看但不删除数据),`MSG_DONTWAIT`(非阻塞模式)等。
- `src_addr`:如果需要知道数据来自哪个地址,可以提供一个指向`sockaddr`结构体的指针。函数会将发送方的地址信息填入这个结构体。
- `addrlen`:指向一个`socklen_t`类型的变量,初始时应设为`sizeof(struct sockaddr)`,函数调用后,它会被更新为实际填充到`src_addr`的地址长度。
`recvfrom()`返回值是接收到的字节数,如果出错则返回-1,并设置`errno`。
这个函数的主要用途是在无连接的UDP通信中,因为UDP是无状态的,每次发送数据都需要指定目标地址,所以接收端也需要知道数据来自哪里。而在TCP中,由于已经建立了连接,接收端不需要知道数据来源,因此通常使用`recv()`。 |
|