void ASControl::readLocalConfig() { _LINE_ITEMS* pitems=itemsptr(); char* itemstr; char* lstr; int i,totalline,find; union ipu eth_ip; printf("..reading AS config file\n"); totalline = readCfgItems(CFG_FILE_PATH); eth_ip.ip = getlocalhostip(BOARD_ETH); sprintf(_localcfg.local_ip,"%u.%u.%u.%u",eth_ip.ipchar[0],eth_ip.ipchar[1],eth_ip.ipchar[2],eth_ip.ipchar[3]); printf("local board ip:%s\n",_localcfg.local_ip); //通过本地IP 来读取本机配置 find=0; for (i=0;i<=totalline;i++) { itemstr = pitems[i].item[IP_POS].content; if (!strcmp(itemstr,_localcfg.local_ip)) { itemstr = pitems[i].item[AS_POS].content; if (!strcmp(itemstr,ACTIVE_BOARD)) { printf("local board config:AS_ACTIVE\n"); _localcfg.local_as=AS_ACTIVE; } else { printf("local board config:AS_STANDBY\n"); _localcfg.local_as=AS_STANDBY; } find=1; break; } } if (!find) { printf("ERROR WARNING:can't find item[%s],pls check cfg file\n", _localcfg.local_ip); exit(0); } //通过active/standby获取对端机器IP if (AS_ACTIVE == reverseCfg(_localcfg.local_as)) { lstr=ACTIVE_BOARD; } else { lstr=STANDBY_BOARD; } find=0; for (i=0;i<=totalline;i++) { itemstr = pitems[i].item[AS_POS].content; if (!strcmp(itemstr,lstr)) { strcpy(_localcfg.peer_ip,pitems[i].item[IP_POS].content); find=1; break; } } if (!find) { printf("ERROR WARNING:can't find item[%s],pls check cfg file\n",lstr); exit(0); } }
/*server apply socket and bind*/ int ServerPrepare(char * ServerId) { char ip[50] ="\0"; socklen_t len; struct sockaddr_in raddr; struct epoll_event event; getlocalhostip(); printf("ip is %s\n",ipptr); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(ipptr); //set ip server_addr.sin_port = htons(0); //set port if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { fprintf(stderr, "socket error:%s\n\a", strerror(errno)); exit(1); } epollfd = epoll_create(MAX_CONNECT); SetNonBlocking(sockfd); event.data.fd = sockfd; event.events = EPOLLIN | EPOLLRDHUP; epoll_ctl(epollfd,EPOLL_CTL_ADD,sockfd,&event); if(bind(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1) { fprintf(stderr, "bind error:%s\n\a", strerror(errno)); close(sockfd); exit(1); } len=sizeof(raddr); if(getsockname(sockfd,(struct sockaddr *)&raddr,&len)<0) { printf("getsockname failed!\n"); return -1; } strcpy(ip,inet_ntoa(raddr.sin_addr)); //printf("ip is %s,port is %d\n",ip,ntohs(raddr.sin_port)); sprintf(ports,"%d",ntohs(raddr.sin_port)); //printf("ports is %s\n",ports); ServerInfo(ServerId,ip,ports); if(listen(sockfd,MAX_CONNECT_QUEUE) == -1) { fprintf(stderr, "listen error:%s\n\a", strerror(errno)); exit(1); } return 0; }
int main() { char ip[50] ="\0"; int sockfd; struct in_addr in; socklen_t len; struct sockaddr_in addr, raddr; sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd<0) { printf("create socket failed!\n"); return -1; } addr.sin_family=AF_INET; addr.sin_port=htons(0); getlocalhostip(); printf("ip is %s\n",ipptr); addr.sin_addr.s_addr=inet_addr(ipptr); if(bind(sockfd,(struct sockaddr *)&addr,sizeof(addr))<0) { printf("bind socket failed!\n"); return -2; } len=sizeof(raddr); if(getsockname(sockfd,(struct sockaddr *)&raddr,&len)<0) { printf("getsockname failed!\n"); return -3; } //in.s_addr = ntohl(raddr.sin_addr.s_addr); strcpy(ip,inet_ntoa(raddr.sin_addr)); printf("------------------------------------------\n"); printf("ip is %s,port is %d\n",ip,ntohs(raddr.sin_port)); sprintf(sPort,"%d",ntohs(raddr.sin_port)); printf("sPort is %s\n",sPort); return 0; }
int main(int argc, char **argv){ union ipu iptest; iptest.ip = getlocalhostip(); return 0; }