예제 #1
0
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;
}
예제 #2
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;
}
예제 #3
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;
}
예제 #4
0
파일: csserv.c 프로젝트: JoeTime17/moosefs
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;
}
예제 #5
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 {
예제 #6
0
//初始化连接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 {
예제 #7
0
//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;
}