【精品】网络协议栈函数.doc

【精品】网络协议栈函数.doc

ID:49411928

大小:350.50 KB

页数:50页

时间:2020-03-02

【精品】网络协议栈函数.doc_第1页
【精品】网络协议栈函数.doc_第2页
【精品】网络协议栈函数.doc_第3页
【精品】网络协议栈函数.doc_第4页
【精品】网络协议栈函数.doc_第5页
资源描述:

《【精品】网络协议栈函数.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、jsend:

2、[(write」readiiirccvii4♦♦Sys.sendSys^rriteSys.readU、Sys.recvjSock_readv_writev.Sock.sendasif1Isoek.recvasgj4znTcpsendBigItcp.recvasgTcp.puihtcp^writtcp^transiit^skbI1tcp」4_do_n「tcp-rcv.itace^proceiitcp.v4.rcvip.local^delivertcp.rcv-established

3、iTp^outputTipITTnlsIFouFpuHil-"T--lidev^queue^ioitj】P」cv丨]necif^receite.skb[netif^riep^r/poll~Fcp^interrupt,图2TCP协议栈在Linux±的实现(以下文件路径都是在2.6.28.7内核Z下,在其它内核下有可能源码的位置不一样)输出过程:1、(sock_sendmsg在kernel/net/socket.c)intsock_sendmsg(structsocket*sock,structm

4、sghdr*msg,size_tsize){structkiocbiocb;structsock_iocbsiocb;intret;init_sync_kiocb(&iocb,NULL);iocb.private=&siocb;ret=_sock_sendmsg(&iocb,sock,msg,size);if(-EIOCBQUEUED==ret)ret=wait_on_sync_kiocb(&iocb);returnret;}2、tcp_sendmsg在kernel/net/ipv4/tcp.c

5、Tinttcp_sendmsg(structkiocb*iocb,structsocket*sock,structmsghdr*msg,size_tsize){structsock*sk=sock->sk;structiovec*iov;structtcp_sock*tp=tcp_sk(sk);structsk_buff*skb;intiovlen,flags;intmss_now,size_goal;interr,copied;longtimeo;lock_sock(sk);TCP_CHECK

6、_TIMER(sk);flags=msg->msg_flags;timeo=sock_sndtimeo(sk,flags&MSG_DONTWAIT);/*Waitforaconnectiontofinish・*/if((l«sk->sk_state)&〜(TCPF_ESTABLISHEDITCPF_CLOSE_WAIT))if((err=sk_stream_wait_connect(sk,&timeo))!=0)gotoout_err;/*Thisshouldbeinpoll*/clear_bi

7、t(SOCK_ASYNC_NOSPACE,&sk->sk_socket->flags);mss_now=tcp_current_mss(sk,!(flags&MSG_OOB));size_goal=tp->xmit_size_goal;/*Okcommencesending.*/iovlen=msg・>msg_iovlen;iov=msg->msg_iov;copied=0;err=-EPIPE;讦(sk->sk_errII(sk->sk_shutdown&SEND_SHUTDOWN))goto

8、do_error;while(—iovlen>=0){intseglen=iov->iov_len;unsignedchar_user*from=iov->iov_base;iov++;while(seglen>0){intcopy;skb=tcp_write_queue_tail(sk);if(!tcp_send_head(sk)II(copy=size_goal-skb->len)<=0){new_segment:/*Allocatenewsegment.IftheinterfaceisSG

9、*allocateskbfittingtosinglepage・*/if(!sk_stream_memory_free(sk))gotowait_for_sndbuf;skb=sk_stream_alloc_skb(sk,select_size(sk),sk->sk_allocation);if(!skb)gotowait_for_memory;/**CheckwhetherwecanuseHWchecksum.*/if(sk->sk_route_caps&NETIF_F_ALL_CSUM)sk

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。