如何深入理解TCP/IP协议的listen实现
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,如何深入理解TCP/IP协议的listen实现,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。listen函数的逻辑比bind还简单。
千家信息网最后更新 2026年11月02日如何深入理解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安全错误
数据库的锁怎样保障安全
上海挚品互联网科技有限公司
互联网科技公司的优势
A股互联网金融科技公司
北京互联网科技
上海挚品互联网科技
互联网与未来科技
奇酷互联网络科技
迪茉互联网科技
互联网科技大会
佰商互联网科技有限公司
中国最先进互联网科技公司
科技与互联网的利与弊
创业天下互联网科技有限公司
以后互联网后是啥科技
互联网科技扶贫时间
佛山市拉法互联网科技有限公司
互联网金融科技公司的优势
中国互联网有什么科技
半导体是互联网高科技吗
萌小萌互联网科技河南有限公司
互联网和科技技术
深圳恒合互联网络科技有限公司
互联网是不是新科技
上海万想互联网科技
科技赋能互联网健康
宁波青枫互联网科技有限公司
宜昌元轩互联网科技有限公司
佛山市翊博互联网络科技有限公司
南京一网一红互联网科技有限公司
河南商务圈互联网科技有限公司