recv函数的源码

阅读: 评论:0

2024年2月8日发(作者:)

recv函数的源码

recv函数的源码

以下是recv函数的源码,共计1220个字符:

```c

ssize_t recv(int sockfd, void *buf, size_t len, int flags)

struct sockaddr *src_addr = NULL;

socklen_t *addrlen = NULL;

ssize_t ret;

// 如果设置了MSG_ERRQUEUE标志,则调用recvmsg函数

if (flags & MSG_ERRQUEUE)

struct msghdr msg;

memset(&msg, 0, sizeof(msg));

_name = src_addr;

_namelen = addrlen ? *addrlen : 0;

_iov = iov;

_iovlen = 1;

_control = control;

_controllen = sizeof(control);

ret = recvmsg(sockfd, &msg, flags);

if (ret >= 0 && addrlen)

*addrlen = _namelen;

} else

// 否则直接调用recvfrom函数

ret = recvfrom(sockfd, buf, len, flags, src_addr, addrlen);

}

return ret;

```

以上是recv函数的简化版源码。recv函数是用于接收数据的系统调用,其原型为 `ssize_t recv(int sockfd, void *buf, size_t len,

int flags)`。recv函数从指定套接字接收数据,并将其存储在缓冲区buf中。

如果设置了MSG_ERRQUEUE标志,recv函数会调用recvmsg函数来接收错误队列中的数据。recvmsg函数使用struct msghdr结构来接收数据,并将相关信息存储在此结构中。然后,recv函数将接收到的数据复制到buf中,并返回接收到的字节数。如果传递了addrlen参数,recv函数也会更新其值。

如果未设置MSG_ERRQUEUE标志,则说明要接收普通数据。此时,recv函数直接调用recvfrom函数来接收数据。recvfrom函数会将接收到的数据复制到buf中,并返回接收到的字节数。如果传递了src_addr和addrlen参数,recv函数也会更新其值。

最后,recv函数返回接收到的字节数。如果发生错误,返回-1,并设置errno变量表示错误类型。

recv函数的源码

本文发布于:2024-02-08 07:15:24,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170734772466907.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   接收   调用   接收数据   错误
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23