⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rpcsock.h

📁 linux得一些常用命令,以及linux环境下的c编程
💻 H
字号:
/* *  rpcsock.h	Declarations for the RPC call interface. * *  Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de> */#ifndef _LINUX_RPCSOCK_H#define _LINUX_RPCSOCK_H/* * The rpcsock code maintains an estimate on the maximum number of out- * standing RPC requests, using the congestion avoidance implemented in * 44BSD. This is basically the Van Jacobson slow start algorithm: If a * retransmit occurs, the congestion window is halved; otherwise, it is * incremented by 1/cwnd when a reply is received and a full number of * requests are outstanding. * * Upper procedures may check whether a request would block waiting for * a free RPC slot by using the RPC_CONGESTED() macro. * * Note: on machines with low memory we should probably use a smaller * MAXREQS value: At 32 outstanding reqs with 8 megs of RAM, fragment * reassembly will frequently run out of memory. */#define RPC_MAXREQS		32#define RPC_CWNDSCALE		256#define RPC_MAXCWND		(RPC_MAXREQS * RPC_CWNDSCALE)/* #define RPC_INITCWND		(RPC_MAXCWND / 2) */#define RPC_INITCWND		RPC_CWNDSCALE#define RPC_CONGESTED(rsock)	((rsock)->cong >= (rsock)->cwnd)/* RPC reply header size: xid, direction, status, accept_status (verifier * size computed separately) */#define RPC_HDRSIZE		(4 * 4)/* * This describes a timeout strategy */struct rpc_timeout {	unsigned long		to_initval,				to_maxval,				to_increment;	int			to_retries;	char			to_exponential;};/* * This describes a complete RPC request */struct rpc_ioreq {	struct rpc_wait *	rq_slot;	struct sockaddr	*	rq_addr;	int			rq_alen;	struct iovec		rq_svec[UIO_FASTIOV];	unsigned int		rq_snr;	unsigned long		rq_slen;	struct iovec		rq_rvec[UIO_FASTIOV];	unsigned int		rq_rnr;	unsigned long		rq_rlen;};/* * This is the callback handler for async RPC. */struct rpc_wait;typedef void	(*rpc_callback_fn_t)(int, struct rpc_wait *, void *);/* * Wait information. This struct defines all the state of an RPC * request currently in flight. */struct rpc_wait {	struct rpc_sock *	w_sock;	struct rpc_wait *	w_prev;	struct rpc_wait *	w_next;	struct rpc_ioreq *	w_req;	int			w_result;	wait_queue_head_t 	w_wait;	rpc_callback_fn_t	w_handler;	void *			w_cdata;	char			w_queued;	char			w_gotit;	__u32			w_xid;};struct rpc_sock {	struct file *		file;	struct socket *		sock;	struct sock *		inet;	struct rpc_wait		waiting[RPC_MAXREQS];	unsigned long		cong;	unsigned long		cwnd;	struct rpc_wait *	pending;	struct rpc_wait *	free;	wait_queue_head_t	backlog;	wait_queue_head_t	shutwait;	int			shutdown;};#ifdef __KERNEL__/* rpc_call: Call synchronously */int			rpc_call(struct rpc_sock *, struct rpc_ioreq *,					 struct rpc_timeout *);/* These implement asynch calls for nfsiod: Process calls rpc_reserve and * rpc_transmits, then passes the request to nfsiod, which collects the * results via rpc_doio */int			rpc_reserve(struct rpc_sock *, struct rpc_ioreq *, int);void			rpc_release(struct rpc_sock *, struct rpc_ioreq *);int			rpc_transmit(struct rpc_sock *, struct rpc_ioreq *);int			rpc_doio(struct rpc_sock *, struct rpc_ioreq *,					 struct rpc_timeout *, int);struct rpc_sock	*	rpc_makesock(struct file *);int			rpc_closesock(struct rpc_sock *);#endif /* __KERNEL__*/#endif /* _LINUX_RPCSOCK_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -