Linux内核中的文件描述符(二)——socket和文件描述符

发表于:2013-1-14 10:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ce123    来源:51Testing软件测试网采编

  当应用程序使用socket()创建一个socket时,会执行sys_socket,其定义如下

asmlinkage long sys_socket(int family, int type, int protocol)
{
 int retval;
 struct socket *sock;

 retval = sock_create(family, type, protocol, &sock);//创建socket
 if (retval < 0)
  goto out;

 retval = sock_map_fd(sock);//分配一个未使用的文件描述符fd,并将socket和fd建立联系
 if (retval < 0)
  goto out_release;

out:
 /* It may be already another descriptor 8) Not kernel problem. */
 return retval;

out_release:
 sock_release(sock);
 return retval;
}

  结构体socket的定义如下(include\linux\net.h):

struct socket {
 socket_state  state;
 unsigned long  flags;
 struct proto_ops *ops;
 struct fasync_struct *fasync_list;
 struct file  *file;//通过这个和文件描述符建立联系
 struct sock  *sk;
 wait_queue_head_t wait;
 short   type;
};

43/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号