static int sla_worker_addr_resolve(void) { uint32_t config_ip; uint16_t config_port; if (tcpresolve(sla_worker_addr[0].host,sla_worker_addr[0].port,&config_ip,&config_port,0) < 0) { MFSLOG(LOG_NOTICE,"host is %s,port is %s.resolve thread 1 failed",sla_worker_addr[0].host,sla_worker_addr[0].port); return -1; } else { sla_config_addr[0].ip = config_ip; sla_config_addr[0].port = config_port; } if (tcpresolve(sla_worker_addr[1].host,sla_worker_addr[1].port,&config_ip,&config_port,0) < 0) { MFSLOG(LOG_NOTICE,"resolve thread 2 failed"); return -1; } else { sla_config_addr[1].ip = config_ip; sla_config_addr[1].port = config_port; } if (tcpresolve(sla_worker_addr[2].host,sla_worker_addr[2].port,&config_ip,&config_port,0) < 0) { MFSLOG(LOG_NOTICE,"resolve thread 3 failed"); return -1; } else { sla_config_addr[2].ip = config_ip; sla_config_addr[2].port = config_port; } if (tcpresolve(sla_worker_addr[3].host,sla_worker_addr[3].port,&config_ip,&config_port,0) < 0) { MFSLOG(LOG_NOTICE,"resolve thread 4 failed"); return -1; } else { sla_config_addr[3].ip = config_ip; sla_config_addr[3].port = config_port; } return 0; }
int masterconn_initconnect(masterconn *eptr) { int status; if (eptr->masteraddrvalid==0) { uint32_t mip,bip; uint16_t mport; if (tcpresolve(BindHost,NULL,&bip,NULL,1)<0) { bip = 0; } eptr->bindip = bip; if (tcpresolve(MasterHost,MasterPort,&mip,&mport,0)>=0) { eptr->masterip = mip; eptr->masterport = mport; eptr->masteraddrvalid = 1; } else { mfs_arg_syslog(LOG_WARNING,"can't resolve master host/port (%s:%s)",MasterHost,MasterPort); return -1; } } eptr->sock=tcpsocket(); if (eptr->sock<0) { mfs_errlog(LOG_WARNING,"create socket, error"); return -1; } if (tcpnonblock(eptr->sock)<0) { mfs_errlog(LOG_WARNING,"set nonblock, error"); tcpclose(eptr->sock); eptr->sock = -1; return -1; } if (eptr->bindip>0) { if (tcpnumbind(eptr->sock,eptr->bindip,0)<0) { mfs_errlog(LOG_WARNING,"can't bind socket to given ip"); tcpclose(eptr->sock); eptr->sock = -1; return -1; } } status = tcpnumconnect(eptr->sock,eptr->masterip,eptr->masterport); if (status<0) { mfs_errlog(LOG_WARNING,"connect failed, error"); tcpclose(eptr->sock); eptr->sock = -1; eptr->masteraddrvalid = 0; return -1; } if (status==0) { syslog(LOG_NOTICE,"connected to Master immediately"); masterconn_connected(eptr); } else { eptr->mode = CONNECTING; eptr->conntime = monotonic_seconds(); syslog(LOG_NOTICE,"connecting ..."); } return 0; }
int masterconn_initconnect(serventry *eptr) { int status; if (eptr->masteraddrvalid==0) { uint32_t mip,bip; uint16_t mport; if (tcpresolve(BindHost,NULL,&bip,NULL,1)>=0) { eptr->bindip = bip; } else { eptr->bindip = 0; } if (tcpresolve(MasterHost,MasterPort,&mip,&mport,0)>=0) { eptr->masterip = mip; eptr->masterport = mport; eptr->masteraddrvalid = 1; } else { MFSLOG(LOG_WARNING,"can't resolve master host/port (%s:%s)",MasterHost,MasterPort); return -1; } } eptr->sock=tcpsocket(); if (eptr->sock<0) { MFSLOG(LOG_WARNING,"create socket, error: %m"); return -1; } if (tcpnonblock(eptr->sock)<0) { MFSLOG(LOG_WARNING,"set nonblock, error: %m"); tcpclose(eptr->sock); eptr->sock=-1; return -1; } if (eptr->bindip>0) { if (tcpnumbind(eptr->sock,eptr->bindip,0)<0) { MFSLOG(LOG_WARNING,"can't bind socket to given ip: %m"); tcpclose(eptr->sock); eptr->sock=-1; return -1; } } status = tcpnumconnect(eptr->sock,eptr->masterip,eptr->masterport); if (status<0) { MFSLOG(LOG_WARNING,"connect failed, error: %m"); tcpclose(eptr->sock); eptr->sock=-1; return -1; } if (status==0) { MFSLOG(LOG_NOTICE,"connected to Master immediately"); masterconn_connected(eptr); } else { eptr->mode = CONNECTING; MFSLOG(LOG_NOTICE,"connecting ..."); } // syslog(LOG_NOTICE,"the masconn's sock is %d,the connection id is %d,masterconnsingleton's sock is %d,masterconnsingleton's id is %d",eptr->sock,eptr->connection,masterconnsingleton->sock,masterconnsingleton->connection); return 0; }
int csserv_init(void) { ListenHost = cfg_getstr("CSSERV_LISTEN_HOST","*"); ListenPort = cfg_getstr("CSSERV_LISTEN_PORT",DEFAULT_CS_DATA_PORT); lsock = tcpsocket(); if (lsock<0) { mfs_errlog(LOG_ERR,"main server module: can't create socket"); return -1; } tcpnonblock(lsock); tcpnodelay(lsock); tcpreuseaddr(lsock); tcpresolve(ListenHost,ListenPort,&mylistenip,&mylistenport,1); if (tcpnumlisten(lsock,mylistenip,mylistenport,100)<0) { mfs_errlog(LOG_ERR,"main server module: can't listen on socket"); return -1; } if (tcpsetacceptfilter(lsock)<0 && errno!=ENOTSUP) { mfs_errlog_silent(LOG_NOTICE,"main server module: can't set accept filter"); } mfs_arg_syslog(LOG_NOTICE,"main server module: listen on %s:%s",ListenHost,ListenPort); csservhead = NULL; main_reload_register(csserv_reload); main_destruct_register(csserv_term); main_poll_register(csserv_desc,csserv_serve); return 0; }
int masterconn_initconnect(masterconn *eptr) { int status; if (eptr->masteraddrvalid==0) { uint32_t mip,bip; uint16_t mport; if (tcpresolve(BindHost,NULL,&bip,NULL,1)<0) { bip = 0; } eptr->bindip = bip; if (tcpresolve(MasterHost,MasterPort,&mip,&mport,0)>=0) { if ((mip&0xFF000000)!=0x7F000000) { // eptr->new_register_mode = 3; eptr->masterip = mip; eptr->masterport = mport; } else { mfs_arg_syslog(LOG_WARNING,"master connection module: localhost (%u.%u.%u.%u) can't be used for connecting with master (use ip address of network controller)",(mip>>24)&0xFF,(mip>>16)&0xFF,(mip>>8)&0xFF,mip&0xFF); return -1; } } else {
//初始化连接Master的tcpsocket //调用:masterconn_init() int masterconn_initconnect(FILE *msgfd,masterconn *eptr) { int status; if (eptr->masteraddrvalid==0) { uint32_t mip,bip; uint16_t mport; if (tcpresolve(BindHost,NULL,&bip,NULL,1)>=0) { eptr->bindip = bip; } else { eptr->bindip = 0; } if (tcpresolve(MasterHost,MasterPort,&mip,&mport,0)>=0) { if ((mip&0xFF000000)!=0x7F000000) { eptr->masterip = mip; eptr->masterport = mport; eptr->masteraddrvalid = 1; } else { if (msgfd) { fprintf(msgfd,"master connection module: localhost (%u.%u.%u.%u) can't be used for connecting with master (use ip address of network controller)\n",(mip>>24)&0xFF,(mip>>16)&0xFF,(mip>>8)&0xFF,mip&0xFF); } else { syslog(LOG_WARNING,"localhost (%u.%u.%u.%u) can't be used for connecting with master (use ip address of network controller)",(mip>>24)&0xFF,(mip>>16)&0xFF,(mip>>8)&0xFF,mip&0xFF); } return -1; } } else {
//init the thread's socket static int sla_sync_socket_init(serventry *eptr,pthread_t tid) { int status; uint32_t shadow_ip = 0,bind_ip = 0,bip = 0; uint16_t shadow_port; int num; int count = 0; num = sla_worker_thread_indent(tid); if (tcpresolve(sla_worker_addr[num].host,sla_worker_addr[num].port,&shadow_ip,&shadow_port,0)>=0) { eptr->masterip = shadow_ip; eptr->masterport = shadow_port; } else { MFSLOG(LOG_ERR,"resolve shadow's addr failed"); return -1; } eptr->sock = tcpsocket(); if (eptr->sock < 0) { MFSLOG(LOG_ERR,"socket init failed"); return -1; } if (tcpnonblock(eptr->sock)<0) { MFSLOG(LOG_WARNING,"set nonblock, error: %m"); tcpclose(eptr->sock); eptr->sock=-1; return -1; } tcpgetpeer(eptr->sock,&(eptr->servip),NULL); eptr->servstrip = matoslaserv_makestrip(eptr->servip); if (tcpresolve(BindHost,NULL,&bind_ip,NULL,1)>=0) { eptr->bindip = bip; } else { eptr->bindip = 0; } if (eptr->bindip>0) { if (tcpnumbind(eptr->sock,eptr->bindip,0)<0) { MFSLOG(LOG_WARNING,"can't bind socket to given ip: %m"); tcpclose(eptr->sock); eptr->sock=-1; return -1; } } eptr->cur_file = (file_info *)malloc(sizeof(file_info)); if (eptr->cur_file == NULL) { MFSLOG(LOG_ERR,"FATAL,malloc file_info failed"); } else { eptr->cur_file->fd = NULL; eptr->cur_file->idx = 0; } while(count < MaxConnect) { status = tcpnumconnect(eptr->sock,eptr->masterip,eptr->masterport); if (status<0) { MFSLOG(LOG_WARNING,"connect failed, error: %m (1)"); tcpclose(eptr->sock); eptr->sock=-1; return -1; } if (status==0) { MFSLOG(LOG_NOTICE,"connected to slave"); tcpnodelay(eptr->sock); eptr->mode=HEADER; eptr->inputpacket.next = NULL; eptr->inputpacket.bytesleft = 8; eptr->inputpacket.startptr = eptr->hdrbuff; eptr->inputpacket.packet = NULL; eptr->outputhead = NULL; eptr->outputtail = &(eptr->outputhead); eptr->lastread = eptr->lastwrite = get_current_time(); count = 100; break; } else { MFSLOG(LOG_ERR,"connect failed, error: %m (2)"); } count++; sleep(1); } return 0; }