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 + -
显示快捷键?