📄 net.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 + -