如何深入理解TCP/IP协议的listen实现
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,如何深入理解TCP/IP协议的listen实现,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。listen函数的逻辑比bind还简单。
千家信息网最后更新 2025年12月03日如何深入理解TCP/IP协议的listen实现
如何深入理解TCP/IP协议的listen实现,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
listen函数的逻辑比bind还简单。bind主要是校验和绑定ip、端口。listen则是修改socket的状态,并记录一些设置。
static int sock_listen(int fd, int backlog)
{
struct socket *sock;
if (fd < 0 || fd >= NR_OPEN || current->files->fd[fd] == NULL)
return(-EBADF);
if (!(sock = sockfd_lookup(fd, NULL)))
return(-ENOTSOCK);
if (sock->state != SS_UNCONNECTED)
{
return(-EINVAL);
}
if (sock->ops && sock->ops->listen)
sock->ops->listen(sock, backlog);
// 设置socket的监听属性,accept函数时用到
sock->flags |= SO_ACCEPTCON;
return(0);
}
static int inet_listen(struct socket *sock, int backlog)
{
struct sock *sk = (struct sock *) sock->data;
// 如果没有绑定端口则绑定一个,并把sock加到sock_array中
if(inet_autobind(sk)!=0)
return -EAGAIN;
if ((unsigned) backlog > 128)
backlog = 128;
// tcp接收队列的长度上限,不同系统实现不一样,具体参考tcp.c的使用
sk->max_ack_backlog = backlog;
// 修改socket状态,防止多次调用listen
if (sk->state != TCP_LISTEN)
{
sk->ack_backlog = 0;
sk->state = TCP_LISTEN;
}
return(0);
}
// 绑定一个随机的端口,更新sk的源端口字段,并把sk挂载到端口对应的队列中,见bind函数的分析
static int inet_autobind(struct sock *sk)
{
/* We may need to bind the socket. */
if (sk->num == 0)
{
sk->num = get_new_socknum(sk->prot, 0);
if (sk->num == 0)
return(-EAGAIN);
put_sock(sk->num, sk);
sk->dummy_th.source = ntohs(sk->num);
}
return 0;
}
关于如何深入理解TCP/IP协议的listen实现问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
端口
函数
问题
更多
状态
队列
分析
帮助
解答
不同
易行
简单易行
上限
内容
字段
小伙
小伙伴
属性
方法
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全大文章
速达软件数据库
网络安全和信息化局工作总结
汽车网络技术现在有哪些
屏幕共享软件开发的相关介绍
arcgis批量管理数据库
数据库的查阅列表为固定值
网络技术与人工智能论文
软件开发和软件编程一样吗
不停服务器
手机版服务器安全组
扫黑除恶网络安全板报
关于网络安全宣传标题
rpc服务器的软件
国家网络安全周标准
游戏赌场软件开发
2008数据库备份
分布式图数据库 排名
针对云服务器的分布式拒绝攻击
同博网络技术
网络技术与应用感想
机器自动学习创建数据库
免费的服务器管理面板
如何加入科技互联网
dhcp服务器的好处
中国知网cnki数据库
网站本地服务器搭建
c服务器端开发
昌平区自制软件开发直销价
网络安全股份公司