📄 2_4网络代码阅读笔(4) - china linux forum.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0111)http://www.linuxforum.net/forum/showflat.php?Cat=&Board=linuxK&Number=147052&page=120&view=collapsed&sb=5&o=all -->
<HTML><HEAD><TITLE>2.4网络代码阅读笔(4) - China Linux Forum</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY>
<CENTER><FONT color=red>著名软件中国镜像:</FONT> <A
href="http://apache.linuxforum.net/"><FONT color=red>Apache|</FONT></A> <A
href="http://php.linuxforum.net/"><FONT color=red>Php|</FONT></A> <A
href="http://debian.linuxforum.net/"><FONT color=red>Debian|</FONT></A> <A
href="http://mysql.linuxforum.net/"><FONT color=red>Mysql|</FONT></A> <A
href="http://proftpd.linuxforum.net/"><FONT color=red>Proftp|</FONT></A> <A
href="http://qmail.linuxforum.net/top.html"><FONT color=red>Qmail|</FONT></A> <A
href="http://samba.linuxforum.net/samba.html"><FONT color=red>Samba|</FONT></A>
<A href="http://www1.cn.squid-cache.org/"><FONT color=red>Squid|</FONT></A> <A
href="http://xfree86.linuxforum.net/"><FONT color=red>Xfree86|</FONT></A> <A
href="http://cpan.linuxforum.net/"><FONT color=red>CPAN|</FONT></A> <A
href="http://ldp.linuxforum.net/"><FONT color=red>LDP|</FONT></A> <A
href="http://gnu.linuxforum.net/"><FONT
color=red>GNU|</FONT></A></CENTER><BR><LINK
href="2_4网络代码阅读笔(4) - China Linux Forum.files/stylesheet2.css" rel=stylesheet
type=text/css><SPAN class=onbody>
<TABLE align=center border=0 cellPadding=3 cellSpacing=0 class=p9 width="95%">
<TBODY>
<TR align=right bgColor=#0099cc vAlign=center>
<TD align=left width="20%"><A
href="http://www.linuxforum.net/index.php"><FONT
color=#ffffff>中国Linux论坛首页</FONT></A></TD>
<TD width="80%"><A
href="http://www.linuxforum.net/forum/ubbthreads.php"><FONT
color=#ffffff>技术论坛|</FONT></A><FON color="#FFFFFF" t> <A
href="http://www.linuxforum.net/docnew/index.php"><FONT
color=#ffffff>文章荟萃</FONT></A><FONT color=#ffffff>| <A
href="http://www.linuxforum.net/books/index.php"><FONT
color=#ffffff>藏经阁</FONT></A>| <A href="http://mail.linuxforum.net/"><FONT
color=#ffffff>会员信箱</FONT></A>| <A href="http://sf.linuxforum.net/"><FONT
color=#ffffff>项目计划</FONT></A>| <A
href="http://www.linuxforum.net/poll2/index.php"><FONT
color=#ffffff>在线调查</FONT></A>| <A href="ftp://ftp.linuxforum.net/"><FONT
color=#ffffff>软件仓库</FONT></A>| <A
href="http://www.linuxforum.net/about.php"><FONT
color=#ffffff>关于本站</FONT></A>| </FONT></TD></TR></TBODY></TABLE><BR></SPAN>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD class=tableborders>
<TABLE border=0 cellPadding=3 cellSpacing=1 width="100%">
<TBODY>
<TR>
<TD align=right class=menubar><A
href="http://www.linuxforum.net/forum/ubbthreads.php?Cat=">讨论区列表</A>
| <A href="http://www.linuxforum.net/forum/search.php?Cat=">搜寻文章</A>
| <A
href="http://www.linuxforum.net/forum/newuser.php?Cat=">新用户注册</A> |
<A href="http://www.linuxforum.net/forum/login.php?Cat=">登入论坛</A> |
<A href="http://www.linuxforum.net/forum/online.php?Cat=">在线用户</A> |
<A
href="http://www.linuxforum.net/forum/faq_chinese.php?Cat=">常见问题</A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<P>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD class=tableborders>
<TABLE border=0 cellPadding=3 cellSpacing=1 width="100%">
<TBODY>
<TR class=darktable>
<TD>
<TABLE cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR class=darktable>
<TD align=left width="33%"><SPAN class=catandforum><A
href="http://www.linuxforum.net/forum/ubbthreads.php?Cat=&C=4">Linux
高级应用</A> <BR> >> <A
href="http://www.linuxforum.net/forum/postlist.php?Cat=&Board=linuxK&page=120&view=collapsed&sb=5&o=all">Linux内核技术</A>
</SPAN></TD>
<TD align=middle width="33%">此话题阅读次数: 333 </TD>
<TD align=right width="33%">
<TABLE border=0>
<TBODY>
<TR>
<TD class=navigation noWrap><IMG align=absMiddle alt=*
src="2_4网络代码阅读笔(4) - China Linux Forum.files/greyflat.gif">平坦模式
</TD>
<TD class=navigation noWrap><A
href="http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=linuxK&Number=147052&page=120&view=collapsed&sb=5&o=all&vc=1"><IMG
align=absMiddle alt=树状模式,一封一封读 border=0
src="2_4网络代码阅读笔(4) - China Linux Forum.files/threaded.gif">树状模式</A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center border=0 cellPadding=4 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD align=left class=small> </TD>
<TD align=right class=small><A
href="http://www.linuxforum.net/forum/printthread.php?Cat=&Board=linuxK&main=147052&type=thread"
target=_blank><IMG align=top border=0
src="2_4网络代码阅读笔(4) - China Linux Forum.files/printthread.gif"> 打印</A>
</TD></TR></TBODY></TABLE>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD class=tableborders>
<TABLE border=0 cellPadding=3 cellSpacing=1 width="100%">
<TBODY>
<TR>
<TD class=darktable rowSpan=2 vAlign=top width="17%"><A
name=Post147052></A><A
href="http://www.linuxforum.net/forum/showprofile.php?Cat=&User=ysqcn&Number=147052&Board=linuxK&what=showflat&page=120&view=collapsed&sb=5&o=all&fpart=1&vc=1">ysqcn</A><BR><SPAN
class=small>(newbie)<BR>08/01/01 20:26<BR></SPAN></TD>
<TD class=subjecttable width="83%">
<TABLE border=0 class=subjecttable width="100%">
<TBODY>
<TR>
<TD align=left width="70%"><IMG height=15
src="2_4网络代码阅读笔(4) - China Linux Forum.files/book.gif"
width=15> <B>2.4网络代码阅读笔(4)</B> </TD>
<TD align=right width="30%"> </TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD class=lighttable width="83%"><BR>
<P class=post>发信人: ysqcn (岁月无声), 信区: llkm <BR>标 题: 2.4网络代码阅读笔(4)
<BR>发信站: UNIX编程 (2001年06月15日16:14:03 星期五), 站内信件
<BR><BR>下面就是sys_accept的代码了: <BR><BR>asmlinkage long sys_accept(int
fd, struct sockaddr *upeer_sockaddr, int *upe <BR>er_addrlen) <BR>{
<BR>struct socket *sock, *newsock; <BR>int err, len; <BR>char
address[MAX_SOCK_ADDR]; <BR>sock = sockfd_lookup(fd, &err);
<BR>if (!sock) <BR>goto out; <BR>err = -EMFILE;
<BR>>>>>新分配一个struct socket结构 <BR>if (!(newsock =
sock_alloc())) <BR>goto out_put; <BR>newsock->type =
sock->type; <BR>newsock->ops = sock->ops;
<BR>>>>>传入newsock,调用inet_accept <BR>err =
sock->ops->accept(sock, newsock, sock->file->f_flags);
<BR>if (err < 0) <BR>goto out_release;
<BR>>>>>如果accept传入了一个对方地址结构变量. <BR>if (upeer_sockaddr) {
<BR>>>>>调用inet_getname,如果连接已经建立,则将newsock->sk中的目的地址传入
<BR>>>>>到address结构中.如果连接没有建立,则返回-ENOTCONN错误,从而下面关闭
<BR>>>>>这个套接字.
<BR>if(newsock->ops->getname(newsock, (struct sockaddr
*)address, &len, 2)<0) <BR>{ <BR>err = -ECONNABORTED;
<BR>goto out_release; <BR>} <BR>err = move_addr_to_user(address,
len, upeer_sockaddr, upeer_addrlen); <BR>if (err < 0) <BR>goto
out_release; <BR>} <BR>/* File flags are not inherited via accept()
unlike another OSes. */
<BR>>>>>分配文件系统层的操作例程,例如分配一个file结构和dentry结构,然后
<BR>>>>>将它们与sock联系起来,如下: <BR>>>>>
file->f_dentry = d_alloc(sock_mnt->mnt_sb->s_root,
&this); <BR>>>>> .................
<BR>>>>> file->f_dentry->d_op =
&sockfs_dentry_operations; <BR>>>>>
d_add(file->f_dentry, sock->inode); <BR>>>>>
file->f_vfsmnt = mntget(sock_mnt); <BR>>>>>
<BR>>>>> sock->file = file; <BR>>>>>
file->f_op = sock->inode->i_fop = &socket_file_ops;
<BR>if ((err = sock_map_fd(newsock)) < 0) <BR>goto out_release;
<BR>out_put: <BR>sockfd_put(sock); <BR>out: <BR>return err;
<BR>out_release: <BR>sock_release(newsock); <BR>goto out_put; <BR>}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -