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

📄 rcompat.c

📁 sock protocol ,it is useful!
💻 C
字号:
/* * Copyright (c) 1997, 1998, 1999 *      Inferno Nettverk A/S, Norway.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. The above copyright notice, this list of conditions and the following *    disclaimer must appear in all copies of the software, derivative works *    or modified versions, and any portions thereof, aswell as in all *    supporting documentation. * 2. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *      This product includes software developed by *      Inferno Nettverk A/S, Norway. * 3. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Inferno Nettverk A/S requests users of this software to return to * *  Software Distribution Coordinator  or  sdc@inet.no *  Inferno Nettverk A/S *  Oslo Research Park *  Gaustadal閑n 21 *  N-0349 Oslo *  Norway * * any improvements or extensions that they make and grant Inferno Nettverk A/S * the rights to redistribute these changes. * */#include "common.h"static const char rcsid[] ="$Id: Rcompat.c,v 1.12 1999/05/14 13:58:19 michaels Exp $";intRselect(nfds, readfds, writefds, exceptfds, timeout)	int nfds;	fd_set *readfds;	fd_set *writefds;	fd_set *exceptfds;	struct timeval *timeout;{	return select(nfds, readfds, writefds, exceptfds, timeout);}intRlisten(s, backlog)	int s;	int backlog;{	return listen(s, backlog);}ssize_tRwrite(d, buf, nbytes)	int d;	const void *buf;	size_t nbytes;{	return Rsend(d, buf, nbytes, 0);}ssize_tRwritev(d, iov, iovcnt)	int d;	const struct iovec *iov;	int iovcnt;{	static const struct msghdr msginit;	struct msghdr msg;	msg = msginit;	/* LINTED operands have incompatible pointer types */	msg.msg_iov			= (const struct iovec *)iov;	msg.msg_iovlen		= iovcnt;	return Rsendmsg(d, &msg, 0);}ssize_tRsend(s, msg, len, flags)	int s;	const void *msg;	size_t len;	int flags;{	static const struct msghdr msghdrinit;	struct msghdr msghdr;	struct iovec iov;	/* LINTED operands have incompatible pointer types */	iov.iov_base		= (const void *)msg;	iov.iov_len			= len;	msghdr = msghdrinit;	msghdr.msg_iov			= &iov;	msghdr.msg_iovlen		= 1;	return Rsendmsg(s, &msghdr, flags);}ssize_tRsendmsg(s, msg, flags)	int s;	const struct msghdr *msg;	int flags;{	size_t sent, ioc;	ssize_t rc;	struct sockaddr name;	socklen_t namelen;	namelen = sizeof(name);	if (getsockname(s, &name, &namelen) == -1) {		errno = 0;		return writev(s, msg->msg_iov, (int)msg->msg_iovlen);	}	switch (name.sa_family) {		case AF_INET:			break;#ifdef AF_INET6		case AF_INET6:			break;#endif /* AF_INET6 */		default:			return sendmsg(s, msg, flags);	}	for (sent = ioc = rc = 0; ioc < msg->msg_iovlen; ++ioc) {		/* LINTED pointer casts may be troublesome */		if ((rc = Rsendto(s, msg->msg_iov[ioc].iov_base,		msg->msg_iov[ioc].iov_len, flags, (struct sockaddr *)msg->msg_name,		msg->msg_namelen)) == -1)			break;		sent += rc;		if (rc != (ssize_t)msg->msg_iov[ioc].iov_len)			break;	}	if (sent == 0)		return rc;	return sent;}ssize_tRread(d, buf, nbytes)	int d;	void *buf;	size_t nbytes;{	return Rrecv(d, buf, nbytes, 0);}ssize_tRreadv(d, iov, iovcnt)	int d;	const struct iovec *iov;	int iovcnt;{	static const struct msghdr msghdrinit;	struct msghdr msg;	msg = msghdrinit;	/* LINTED operands have incompatible pointer types */	msg.msg_iov		= (const struct iovec *)iov;	msg.msg_iovlen	= iovcnt;	return Rrecvmsg(d, &msg, 0);}ssize_tRrecv(s, msg, len, flags)	int s;	void *msg;	size_t len;	int flags;{	static const struct msghdr msghdrinit;	struct msghdr msghdr;	struct iovec iov;	/* LINTED cast discards 'const' from pointer target type */	iov.iov_base		= (void *)msg;	iov.iov_len			= len;	msghdr = msghdrinit;	msghdr.msg_iov			= &iov;	msghdr.msg_iovlen		= 1;	return Rrecvmsg(s, &msghdr, flags);}ssize_tRrecvmsg(s, msg, flags)	int s;	struct msghdr *msg;	int flags;{	size_t received, ioc;	ssize_t rc;	struct sockaddr name;	socklen_t namelen;	namelen = sizeof(name);	if (getsockname(s, &name, &namelen) == -1) {		errno = 0;		return readv(s, msg->msg_iov, (int)msg->msg_iovlen);	}	switch (name.sa_family) {		case AF_INET:			break;#ifdef AF_INET6		case AF_INET6:			break;#endif /* AF_INET6 */		default:			return recvmsg(s, msg, flags);	}	for (received = ioc = rc = 0; ioc < msg->msg_iovlen; ++ioc) {		/* LINTED pointer casts may be troublesome */		if ((rc = Rrecvfrom(s, msg->msg_iov[ioc].iov_base,		msg->msg_iov[ioc].iov_len, flags, (struct sockaddr *)msg->msg_name,		&msg->msg_namelen)) == -1)			break;		received += rc;		if (rc != (ssize_t)msg->msg_iov[ioc].iov_len)			break;	}	if (received == 0)		return rc;	return received;}

⌨️ 快捷键说明

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