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

📄 tcp_conn.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#ifndef lintstatic char *sccsid = "@(#)tcp_conn.c	4.1     ULTRIX  7/2/90";#endif#include "lp.h"/* *		T C P _ c o n n * * Create a TCP connection to the remote printer server. * * Inputs:		char *rhost; * Outputs:		none * Returns:		FD open on network printer * * The string "rhost" is expected to be something like "decwrl", or * "decwrl.dec.com", or "decwrl.dec.com/servicename". If the / is present, * then the string following it is the name of the service, to be looked * up in /etc/services. If no name is provided (the / is absent), then * the service "printserver" is assumed. * *//* SCCS history beginning * *************************************************************** *                -- Revision History -- * *************************************************************** *  * 4.1  13/09/88 -- gray * date and time created 88/09/13 15:39:38 by gray *  * *************************************************************** *  * 5.1  06/10/88 -- hodges * vNe *  * *************************************************************** *  * 5.2  12/10/88 -- root * FixingNE *  * *************************************************************** *  * 5.3  13/10/88 -- root * FixingNE *  * *************************************************************** * * 5.4  16/10/88 -- thoms * Provided static fatal routine to use log file so that * error messages are available. * * SCCS history end */static void fatal(fmt, arg1, arg2)char *fmt;int arg1, arg2;{	log(fmt, arg1, arg2);	exit(1);}tcp_conn(rhost)char *rhost;{    struct hostent *hp;    struct servent *sp;    struct sockaddr_in sin;    int s, retries, aval;    int err;    char hostString[512];    char serviceName[512];    extern int sys_nerr;    extern char *sys_errlist[];    /*     * Get the host address and port number to connect to.     */    strcpy(serviceName,"printserver");    sscanf(rhost,"%[^/]/%[^/]", hostString, serviceName);    bzero((char *)&sin, sizeof(sin));    aval = inet_addr(hostString);    if (aval != -1) {	sin.sin_addr.s_addr = aval;    } else {	hp = gethostbyname(hostString);	if (hp == (struct hostent *) NULL)	    fatal("unknown host %s", hostString);	sin.sin_addr.s_addr = *(int *) hp->h_addr;    }    sp = getservbyname(serviceName, "tcp");    if (sp == (struct servent *) NULL)        fatal("Service '%s/tcp' not defined. Fix /etc/services.",serviceName);    sin.sin_family = AF_INET;    sin.sin_port = sp->s_port;    if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {        if ((errno > 0) && (errno <= sys_nerr))            fatal("Can't get socket: %s",sys_errlist[errno]);        else    fatal("Can't get socket, errno=%d",errno);    }    retries = 0;    while (1) {        if (connect(s, (caddr_t)&sin, sizeof(sin), 0) < 0) {            err = errno;            close(s);	    retries = (retries > 5) ? 6 : retries+1;	    status("Trying to connect to %s",hostString);            if (err == ECONNREFUSED) sleep(1<<retries);        } else	    return(s);    }}

⌨️ 快捷键说明

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