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

📄 net.c

📁 API
💻 C
字号:
#include <stdio.h>
#include <signal.h>
#include <setjmp.h>
#include "mytools.h"

jmp_buf	position;

int	net_timeout;
void	netout();

/*--------------------------------------------------------
 测试网络是否正常 
 网络正常   : 返回 0
 网络不正常 : 返回 -1  , possibly delay 10second 

 注意       : ping命令可能因版本关系(参数要求不同) , 
	      影响ping_net()函数的通用性 
 search flag string : icmp_seq
-------------------------------------------------------- */
ping_net ( ip_addr, timeout )
char	*ip_addr ;
int	timeout;
{
FILE	*fp ;
int	i , len , count = 2 , packetsize = 1 ;
int	found = 0 ;
char	ch , buf[200];
char	tmp1[80] ;

	for ( i = 0 ; i < 15 ; i ++ ) {
		ch = ip_addr[i] ;
		if ( ch == 0 || ch == '\t' ) break ;
	}
	ip_addr[i] = 0 ;
	sprintf(buf,"ping  -c %d -s %d %s| grep \"icmp_seq\"" , \
		count , packetsize , ip_addr ) ;

	net_timeout = 0;
	signal( SIGALRM, netout );
	setjmp( position );
	if( net_timeout == 1 )	return( -1 );

	alarm( timeout );
	if((fp=popen(buf,"r")) == NULL) {
		alarm( 0 );
		return(-1);
	}

	do {
		fscanf(fp,"%s",tmp1);
		if ( strncmp ( tmp1 , "icmp_seq" , 8 ) == 0 ) {
			found = 1 ;
			break ;
		}
	} while ( !feof ( fp ) ) ;
	pclose(fp);
	alarm( 0 );
	if ( found ) return ( 0 ) ;
	
	return ( -1 ) ;
}

void netout()
{
	alarm(0);
	net_timeout = 1;
	longjmp( position, 1 );
}

get_netport()
{
	return( 6264 );	
}

#ifdef zgx010519_added
#else
/*
 * 根据新旧版本获取超级服务网络端口号
 */
get_srv_port(is_newver)
{
	char	name[128];
	unsigned short port;
	unsigned char	listen;

	if (!is_newver)	/* NAS5.X使用6264 */
		return( 6264 );	
	/* 新版NAS(6.0),从配置文件$(WORKDIR)/etc/TrCp_tcp.conf获取 */
	if (get_srv_conf(name, &port, &listen) < 0)
#ifdef zgx010728_modi
		return(8998);	/* 缺省为8998 */
#else
		return(6264);	/* 缺省也为6264 */
#endif
	return(port);
}
/*
 * 从配置文件TrCP_tcp.conf中获取NAS60的supersrv的服务名、端口、LISTEN
 * sup_srv.c及updown、nettest模块调用
 * 以后其他模块连接时,判断对方NAS版本,若为旧版,则固定使用6264
 * 若是新版,则使用配置文件中指定的值。

 * 主要为了解决同一台机器上安装NAS6.0与原NAS5.X并存的问题。
 */
get_srv_conf(name, port, listen)
char    *name;
unsigned short  *port;
unsigned char   *listen;
{
        int     i;
	char	filenm[128];
        FILE    *fp;
        char    *sp, workdir[128];
        char    srv_name[128], srv_port[128], srv_listen[128];
	char	tmpstr[1024];

	sp = (char *)getenv("WORKDIR");
	if (sp == NULL)
		strcpy(workdir, "/usr/bts");
	else
		strcpy(workdir, sp);
		
	sprintf(filenm, "%s/etc/TrCP_tcp.conf" , workdir);
	
	fp = fopen(filenm, "r");
	if (fp == NULL)
		return(-2);

	while (!feof(fp)) {
		if (fgets(tmpstr, 1024, fp) == NULL)
			return(-3);
		
                DelSpace(tmpstr);
		if (tmpstr[0] == '\0')	/* 跳过空行 */
                        continue;
		if (tmpstr[0] == '#')	/* 跳过注释行(第一个非空格字符为#) */
                        continue;
                /*
                 * 第一个有效行
		 * SRV_NAME SRV_PORT SRV_LISTEN SRV_PATH ...
                 */
		sscanf(tmpstr, "%s %s %s", srv_name, srv_port, srv_listen);

		/* 服务名一般不多于30个字符 */
		strncpy(name, srv_name, 30);
		name[30] = '\0';

		if (atoi(srv_port) > 65535 || atoi(srv_port) <= 0)
			return(-1);
		*port = (unsigned short)atoi(srv_port);

		if (atoi(srv_listen) > 255 || atoi(srv_listen) <= 0)
			*listen = 50;
		*listen = (unsigned char)atoi(srv_listen);
		return(0);
	}
	return(-3);
}
#endif

⌨️ 快捷键说明

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