vi interface_check.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/select.h>
#include <time.h>
#define INTF_NUM 5
#define VAC_SOAP_IP "10.199.69.33"
#define VAC_SOAP_PORT 9000
#define VAC_ORDER_IP "10.199.69.12"
#define VAC_ORDER_PORT 9999
#define SGIP_IP "10.199.70.151"
#define SGIP_PORT 8881
#define CMS_FTP_IP "10.199.76.12"
#define CMS_FTP_PORT 21
#define CONTENT_SYNC_TO_CMS_IP "10.199.76.14"
#define CONTENT_SYNC_TO_CMS_PORT 8080
int send_to_169(char *snd_buf_tmp) {
int sd;
int ret;
struct sockaddr_in his_end;
sd=socket(PF_INET,SOCK_STREAM,0);
if(sd==-1) {
fprintf(stderr,"send_to_169 socket() error.\n");
return -1;
}
his_end.sin_family=AF_INET;
his_end.sin_port=htons(10010);
his_end.sin_addr.s_addr=inet_addr("10.199.75.169");
ret=connect(sd,(struct sockaddr *)&his_end,sizeof(his_end));
if(ret==-1) {
perror("send_to_169 connect()");
return -1;
}
ret=write(sd,snd_buf_tmp,strlen(snd_buf_tmp));
if(ret==-1) {
fprintf(stderr,"send_to_169 write() error.\n");
return -1;
}
printf("client write %d bytes.\n",ret);
ret=close(sd);
if(ret==-1) {
fprintf(stderr,"send_to_169 close() error.\n");
exit(-1);
}
return 0;
}
int main(void) {
int sd;
int ret;
struct sockaddr_in his_end;
int flags,flags1;
int fdmax=0;
fd_set rfds,wfds,exfds;
struct timeval tv;
int i;
char snd_buf[1024];
// char *ip[INTF_NUM]={"10.199.69.33","10.199.69.12","10.199.70.151","10.199.76.12","10.199.76.14"};
// int port[INTF_NUM]={9000,9999,8881,21,8080};
//
char *ip[INTF_NUM]={VAC_SOAP_IP,VAC_ORDER_IP,SGIP_IP,CMS_FTP_IP,CONTENT_SYNC_TO_CMS_IP};
int port[INTF_NUM]={VAC_SOAP_PORT,VAC_ORDER_PORT,SGIP_PORT,CMS_FTP_PORT,CONTENT_SYNC_TO_CMS_PORT};
//
// char *ip[INTF_NUM]={VAC_SOAP_IP};
// int port[INTF_NUM]={VAC_SOAP_PORT};
static char *ip_name[INTF_NUM]={"VAC_SOAP_IP","VAC_ORDER_IP","SGIP_IP","CMS_FTP_IP","CONTENT_SYNC_TO_CMS_IP"};
static char *port_name[INTF_NUM]={"VAC_SOAP_PORT","VAC_ORDER_PORT","SGIP_PORT","CMS_FTP_PORT","CONTENT_SYNC_TO_CMS_PORT"};
// static char *ip_name[INTF_NUM]={"VAC_SOAP_IP"};
// static char *port_name[INTF_NUM]={"VAC_SOAP_PORT"};
char nowtime[128];
char hname[128],hostname[128];
char *p,*h_name;
time_t timep;
struct tm *p1;
timep=time(NULL);
p1=localtime(&timep);
snprintf(nowtime,128,"%d-%02d-%02d-%02d-%02d-%02d",1900+p1->tm_year,(1+p1->tm_mon),p1->tm_mday,p1->tm_hour,p1->tm_min,p1->tm_sec);
ret=gethostname(hostname,sizeof(hostname));
if(ret==-1) {
fprintf(stderr,"gethostname() error.\n");
exit(-1);
}
memset(hname,0,128);
strcpy(hname,hostname);
for(p=strtok(hname,"-");p;p=strtok(NULL,"-")) {
h_name=p;
}
// printf("INTF_NUM=%d\n===================================\n",INTF_NUM);
printf("%s\n",nowtime);
printf("hostname=%s\n",hostname);
// printf("hname=%s\n",str);
for(i=0;i<INTF_NUM;i++) {
memset(snd_buf,0,1024);
sd=socket(PF_INET,SOCK_STREAM,0);
if(sd==-1) {
perror("socket()");
exit(-1);
}
flags=fcntl(sd,F_GETFL);
if(flags==-1) {
fprintf(stderr,"F_GETFL error.\n");
exit(-1);
}
// printf("F_GETFL flags=%d\n",flags);
flags|=O_NONBLOCK;
ret=fcntl(sd,F_SETFL,flags);
if(ret==-1) {
fprintf(stderr,"F_SETFL error.\n");
exit(-1);
}
// printf("F_SETFL flags=%d\n",flags);
// printf("*******************\n");
// flags=fcntl(sd,F_GETFL);
// printf("sd=%d,ip=%s,port=%d,flags=%d\n",sd,ip[i],port[i],flags);
his_end.sin_family=AF_INET;
his_end.sin_port=htons(port[i]);
his_end.sin_addr.s_addr=inet_addr(ip[i]);
ret=connect(sd,(struct sockaddr *)&his_end,sizeof(his_end));
// printf("sd=%d,ret=%d,err=%s\n",sd,ret,strerror(errno));
if(ret==0) {
fprintf(stderr,"send_to_169 connect() ok.\n");
}
else if(ret==-1 && errno==EINPROGRESS) {
fdmax=sd;
// fdmax=0;
// printf("sd=%d\n",sd);
FD_ZERO(&rfds);
FD_ZERO(&wfds);
FD_ZERO(&exfds);
FD_SET(sd,&rfds);
FD_SET(sd,&wfds);
FD_SET(sd,&exfds);
tv.tv_sec=2;
tv.tv_usec=0;
ret=select(fdmax+1,&rfds,&wfds,&exfds,&tv);
printf("select ret=%d\n",ret);
// if(ret>0) {
if(ret==2 && FD_ISSET(sd,&rfds) && FD_ISSET(sd,&wfds)) {
// fprintf(stderr,"select() ok, %s -> %s(%s):%s(%d) ok.\n",h_name,ip_name[i],ip[i],port_name[i],port[i]);
printf("Connection refused\n");
snprintf(snd_buf,1024,"select() Connection refused, %s -> %s(%s):%s(%d).\n",h_name,ip_name[i],ip[i],port_name[i],port[i]);
printf("%s",snd_buf);
ret=send_to_169(snd_buf);
if(ret==-1) {
fprintf(stderr,"send_to_169() error.\n");
exit(-1);
}
}
else if(ret==1 && FD_ISSET(sd,&wfds)) {
printf("select() ok, %s -> %s(%s):%s(%d) ok.\n",h_name,ip_name[i],ip[i],port_name[i],port[i]);
}
else if(ret==0){
// fprintf(stderr,"select() timeout.\n");
printf("select() timeout.\n");
snprintf(snd_buf,1024,"select() timeout, %s -> %s(%s):%s(%d)\n",h_name,ip_name[i],ip[i],port_name[i],port[i]);
printf("snd_buf=%s",snd_buf);
ret=send_to_169(snd_buf);
if(ret==-1) {
fprintf(stderr,"send_to_169() error.\n");
exit(-1);
}
}
else {
// fprintf(stderr,"select() error.\n");
printf("select() error.\n");
snprintf(snd_buf,1024,"select() error, %s -> %s(%s):%s(%d)\n",h_name,ip_name[i],ip[i],port_name[i],port[i]);
printf("snd_buf=%s",snd_buf);
ret=send_to_169(snd_buf);
if(ret==-1) {
fprintf(stderr,"send_to_169() error.\n");
exit(-1);
}
}
}
/*
ret=shutdown(sd,SHUT_RD);
printf("shutdown ret=%d\n",ret);
perror("shutdown()");
*/
ret=close(sd);
if(ret==-1) {
fprintf(stderr,"close() error.\n");
exit(-1);
}
if(i!=4) {
printf("-----------------------------------------\n");
sleep(2);
}
else {
printf("-------------------------------------------------------------------------------\n\n");
}
}
// close(sd);
exit(0);
}