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

📄 uipc_socket.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lintstatic        char sccsid[] = "@(#)uipc_socket.c 1.1 92/07/30 Copyr 1983 Sun Micro";#endif#include <sys/param.h>#include "boot/systm.h"#include <sys/user.h>#include <sys/proc.h>#include <sys/file.h>#include <sys/buf.h>#include <sys/mbuf.h>#include <sys/un.h>#include "boot/protosw.h"#include <sys/socket.h>#include <sys/socketvar.h>#include <sys/stat.h>#include <sys/ioctl.h>#include <sys/uio.h>#include <net/route.h>#include <netinet/in.h>#include <net/if.h>static int dump_debug = 10;#undef	uextern struct user u;/* * Socket operation routines. * These routines are called by the routines in * sys_socket.c or from a system process, and * implement the semantics of socket operations by * switching out to the protocol specific routines. * * TODO: *	sostat *	test socketpair *	PR_RIGHTS *	clean up select, async *	out-of-band is a kludge *//*ARGSUSED*/socreate(dom, aso, type, proto)	struct socket **aso;	register int type;	int proto;{	register struct protosw *prp;	register struct socket *so;	register struct mbuf *m;	register int error;	if (proto)		prp = pffindproto(dom, proto);	else		prp = pffindtype(dom, type);	if (prp == 0)	{		dprint(dump_debug, 10,			"socreate: EPROTONOSUPPORT\n");		return (EPROTONOSUPPORT);	}	if (prp->pr_type != type)	{		dprint(dump_debug, 10,                        "socreate: EPROTOTYPE\n");		return (EPROTOTYPE);	}	m = m_getclr(M_WAIT, MT_SOCKET);	if (m == 0)	{		dprint(dump_debug, 10,                         "socreate: ENOBUFS\n");		return (ENOBUFS);	}	so = mtod(m, struct socket *);	so->so_options = 0;	so->so_state = 0;	so->so_type = type;	if (u.u_uid == 0)		so->so_state = SS_PRIV;	so->so_proto = prp;	error =	    (*prp->pr_usrreq)(so, PRU_ATTACH,		(struct mbuf *)0, (struct mbuf *)0, (struct mbuf *)0);	if (error) {		dprint(dump_debug, 10,                          "socreate: prp->pr_usrreq error %d\n", error);		so->so_state |= SS_NOFDREF;		sofree(so);		return (error);	}	*aso = so;	return (0);}sobind(so, nam)	struct socket *so;	struct mbuf *nam;{	int s = splnet();	int error;	error = (*so->so_proto->pr_usrreq)(so, PRU_BIND,		(struct mbuf *)0, nam, (struct mbuf *)0);	(void) splx(s);	return (error);}#ifdef	NEVERsolisten(so, backlog)	register struct socket *so;	int backlog;{	int s = splnet(), error;	error =	    (*so->so_proto->pr_usrreq)(so, PRU_LISTEN,		(struct mbuf *)0, (struct mbuf *)0, (struct mbuf *)0);	if (error) {		(void) splx(s);		return (error);	}	if (so->so_q == 0) {		so->so_q = so;		so->so_q0 = so;		so->so_options |= SO_ACCEPTCONN;	}	if (backlog < 0)		backlog = 0;	so->so_qlimit = MIN(backlog, SOMAXCONN);	(void) splx(s);	return (0);}#endif	/* NEVER *//*ARGSUSED*/sofree(so)	register struct socket *so;{#ifdef lint	so = so;#endif lint}

⌨️ 快捷键说明

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