dgwrite.c,v
来自「TCP-IP红宝书源代码」· C,V 代码 · 共 74 行
C,V
74 行
head 1.1;
access;
symbols;
locks
dls:1.1; strict;
comment @ * @;
1.1
date 97.09.21.19.25.42; author dls; state Dist;
branches;
next ;
desc
@@
1.1
log
@pre-3e code
@
text
@/* dgwrite.c - dgwrite */
#include <conf.h>
#include <kernel.h>
#include <network.h>
/*------------------------------------------------------------------------
* dgwrite - write one datagram to a datagram pseudo-device
*------------------------------------------------------------------------
*/
int dgwrite(pdev, pxg, len)
struct devsw *pdev;
struct xgram *pxg;
int len;
{
struct ep *pep;
struct ip *pip;
struct udp *pudp;
struct dgblk *pdg;
int ipa;
int dst; /* destination UDP port */
if (len < 0 || len > U_MAXLEN)
return SYSERR;
pdg = (struct dgblk *) pdev->dvioblk;
pep = (struct ep *) getbuf(Net.netpool);
if ((int)pep == SYSERR)
return SYSERR;
pep->ep_order = ~0;
pip = (struct ip *) pep->ep_data;
pudp = (struct udp *) pip->ip_data;
dst = pdg->dg_fport;
ipa = pdg->dg_fip;
if ((pdg->dg_mode & DG_NMODE) != 0) {
if (dst == 0) {
dst = pxg->xg_fport;
ipa = pxg->xg_fip;
}
blkcopy(pudp->u_data, pxg->xg_data, len);
} else {
if ( dst == 0) {
freebuf(pep);
return SYSERR;
}
blkcopy(pudp->u_data, pxg, len);
}
return udpsend(ipa, dst, pdg->dg_lport, pep, len,
pdg->dg_mode & DG_CMODE);
}
@
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?