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

📄 sopenv.c

📁 Porting the Simple Sockets Library Dr. Charles E. Campbell, Jr.
💻 C
字号:
/* Sopenv.c : this function attempts to open a Socket based on an *   environment variable containing machine names separated by colons. */#include <stdio.h>#include <ctype.h>#include "xtdio.h"#include "sockets.h"/* ----------------------------------------------------------------------- * Definitions: */#define MACHINE_SEP	':'#define BUFSIZE		256/* ----------------------------------------------------------------------- * Source Code: *//* Sopenv: opens Socket for server/client based on environment variable */#ifdef __PROTOTYPE__Socket *Sopenv(  char *sktname,		/* name of server					*/  char *ctrl,			/* "s", "c"							*/  char *env_var)		/* environment variable to be used	*/#elseSocket *Sopenv(sktname,ctrl,env_var)char *sktname;		/* name of server					*/char *ctrl;				/* "s", "c"							*/char *env_var;			/* environment variable to be used	*/#endif{char        *at=NULL;char        *env=NULL;char        *s=NULL;int          more=0;Socket      *skt=NULL;static char  buf[BUFSIZE];/* see if Socket can be opened on current machine, first */skt= Sopen(sktname,ctrl);if(skt) {	return skt;	}/* cannot open server on a different host *  ie. using Sopenv to open a server doesn't give any *      value added because it doesn't make any sense to *      "search" a path of machines to do it. */else if(!strcmp(ctrl,"s") || !strcmp(ctrl,"S")) {	return (Socket *) NULL;	}/* look for '@' in string and null it */at= (char *) strchr(sktname,'@');if(at) *at= '\0';/* check out the environment variable */if(!env_var || !*env_var) env_var= "SKTPATH";env= getenv(env_var);/* attempt to open connection to Socket server using environment search */if(env) while(*env) { /* while there's environment-variable info left... */	for(s= env; *s && *s != MACHINE_SEP; ++s);	more= *s == MACHINE_SEP;	*s  = '\0';	sprintf(buf,"%s@%s",sktname,env);	/* attempt to open Socket given machine name */	skt= Sopen(buf,ctrl);	if(more) *s= MACHINE_SEP;	if(skt) { /* successfully opened Socket */		if(at) *at= '@';		return skt;		}	if(more) {	/* another path to search */		*s = MACHINE_SEP;		env= s + 1;		}	else env= s;	}/* restore '@' if it was present */if(at) *at= '@';/* return NULL pointer, thereby modestly indicating a lack of success */return (Socket *) NULL;}/* ======================================================================= * Test Code: */#ifdef DEBUG_TEST#ifdef unixvoid *sbrk(int);#endif/* main: */int main(int argc,char **argv){Socket *skt;#ifdef unixchar *memstart=NULL;char *memory=NULL;#endifrdcolor();#ifdef unixmemstart= NULL;#endifdo {	skt= Sopenv("SOPENV","c","SKTPATH");	++cnt;#ifdef unix	memory= sbrk(0);	if(!memstart) memstart= memory;	else if(memory > memstart)	  error(XTDIO_WARNING,"memory leak: ([memory=%dd] - [memstart=%dd])= %d\n",	  (int) memory,(int) memstart,memory - memstart);#endif	} while(!skt);Sclose(skt);printf("took %d tries to open the SOPENV client\n",cnt);return 0;}#endif	/* DEBUG_TEST *//* --------------------------------------------------------------------- */

⌨️ 快捷键说明

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