Example #1
0
int connect2server(unsigned int serverip, int fileid)
{
	int       conn_s;
	struct    sockaddr_in servaddr;
	//short int port = SERV_PORT;
	extern short int serv_port;
	short int port = serv_port;
	int ret = 0;
	int sndsize = 1024*1024;
	extern double TB_RATE_AVG_INTERVAL;

	if ( (conn_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) 
	{
		fprintf(stderr, "CLNT: Error creating listening socket.\n");
		return -1;
	}

	ret = setsockopt(conn_s, SOL_SOCKET, SO_SNDBUF, 
			(char *)&sndsize, sizeof(int));
	sndsize = 1024*1024;
	ret = setsockopt(conn_s, SOL_SOCKET, SO_RCVBUF, 
			(char *)&sndsize, sizeof(int));

	memset(&servaddr, 0, sizeof(servaddr));
	servaddr.sin_family      = AF_INET;
	servaddr.sin_port        = htons(port);
	servaddr.sin_addr.s_addr = serverip;

	if (connect_nonb(conn_s, (struct sockaddr *)&servaddr, sizeof(servaddr), 5) < 0 )
	{
		//printf("Cannot connect to server. Server may be busy; please try in a few minutes.\n");
		return -1;
	}

	pnewclientpacket pkt;
	pkt.header.ptype = P_NEWCLIENT;
	pkt.header.length = 0;
	pkt.version = htonl(VERSION);
	pkt.fileid = 0;
	pkt.delta = TB_RATE_AVG_INTERVAL;
	writewrapper(conn_s, (char *)&pkt, sizeof(struct _newclientpkt));

	pnewclientack pnewack;
	readwrapper(conn_s, (char *)&pnewack, sizeof(struct _newclientack));
	if(pnewack.header.ptype != P_NEWCLIENT_ACK)
	{
		printf("Error: bad packet type: %d\n", pnewack.header.ptype);
		close(conn_s);
		return -1;
	}
	if(pnewack.compatibilityFlag == 0)
	{
		printf("Incompatible server. Please download the latest version of ShaperProbe client from:\nhttp://www.cc.gatech.edu/~partha/diffprobe/shaperprobe.html\n");
		return -1;
	}

	return conn_s;
}
Example #2
0
int connect2server(unsigned int serverip, int fileid)
{
	int       conn_s;
	struct    sockaddr_in servaddr;
	short int port = SERV_PORT;
	int ret = 0;
	int sndsize = 1024*1024;

	if ( (conn_s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) 
	{
		fprintf(stderr, "CLNT: Error creating listening socket.\n");
		return -1;
	}

	ret = setsockopt(conn_s, SOL_SOCKET, SO_SNDBUF, 
			(char *)&sndsize, sizeof(int));
	sndsize = 1024*1024;
	ret = setsockopt(conn_s, SOL_SOCKET, SO_RCVBUF, 
			(char *)&sndsize, sizeof(int));

	memset(&servaddr, 0, sizeof(servaddr));
	servaddr.sin_family      = AF_INET;
	servaddr.sin_port        = htons(port);
	servaddr.sin_addr.s_addr = serverip;

	if (connect_nonb(conn_s, (struct sockaddr *)&servaddr, sizeof(servaddr), 5) < 0 )
	{
		printf("Cannot connect to server. Server may be busy; please try in a few minutes.\n");
		return -1;
	}

	pnewclientpacket pkt;
	pkt.header.ptype = P_NEWCLIENT;
	pkt.header.length = 0;
	pkt.version = 1;
	pkt.fileid = fileid;
	writewrapper(conn_s, (char *)&pkt, sizeof(struct _newclientpkt));

	pnewclientack pnewack;
	readwrapper(conn_s, (char *)&pnewack, sizeof(struct _newclientack));
	if(pnewack.header.ptype != P_NEWCLIENT_ACK)
	{
		printf("Error: bad packet type: %d\n", pnewack.header.ptype);
		close(conn_s);
		return -1;
	}
	if(pnewack.compatibilityFlag == 0)
	{
		printf("Incompatible server. Please download the latest version of DiffProbe client.\n");
		return -1;
	}

	return conn_s;
}
rtsp_ret_e ConnectServer (const char *host, int port)
{
    int socket_type = SOCK_STREAM;
    struct sockaddr_in server;
    struct hostent *hp;
    char errbuf[ERRBUF_LEN];

    memset(&server, 0, sizeof(server));

    if (isalpha(host[0])) {   /* server address is a name */
        hp = gethostbyname(host);
        if (hp == NULL ) {
            VQEC_LOG_ERROR("ConnectServer:: Host %s not found!\n", host);
            return RTSP_FAILURE;
        }

        memcpy(&(server.sin_addr), hp->h_addr, hp->h_length);
        server.sin_family = hp->h_addrtype;
    }
    else  { /* Simply just use it */
        if (inet_aton(host, &(server.sin_addr)) == 0) {
            VQEC_LOG_ERROR("ConnectServer:: Invalid address %s is used!\n",
                           host);
            return RTSP_FAILURE;
        }
        server.sin_family = AF_INET;
    }

    server.sin_port = htons(port);

    client.socket = socket(AF_INET, socket_type, 0); /* Open the socket */
    if (client.socket < 0) {
        VQEC_LOG_ERROR("ConnectServer:: Could not open the socket!\n");
        return RTSP_SOCKET_ERR;
    }

    if (connect_nonb(client.socket,
                     (struct sockaddr*)&server, 
                     sizeof(server), 
                     RTSP_CLIENT_TCP_CONNECT_TIMEOUT_SECS)
        == SOCKET_ERROR) {
        VQEC_LOG_ERROR("ConnectServer:: Could not connect to the server "
                       "%s! (connect error: %s)\n", host,
                       strerror_r(errno, errbuf, ERRBUF_LEN));
        return RTSP_CONNECT_ERR;
    }

    return RTSP_SUCCESS;
}
Example #4
0
int Ctcs::Connect()
{
  ssize_t r;
  m_last_timestamp = now;

  if( _s2sin(m_host, m_port, &m_sin) < 0 ){
    CONSOLE.Warning(2, "warn, get CTCS ip address failed.");
    return -1;
  }

  m_sock = socket(AF_INET, SOCK_STREAM, 0);
  if( INVALID_SOCKET == m_sock ) return -1;

  if( setfd_nonblock(m_sock) < 0 ){
    CLOSE_SOCKET(m_sock);
    m_sock = INVALID_SOCKET;
    return -1;
  }

  r = connect_nonb(m_sock, (struct sockaddr *)&m_sin);
  if( r == -1 ){
    CLOSE_SOCKET(m_sock);
    m_sock = INVALID_SOCKET;
    return -1;
  }else if( r == -2 ){
    m_status = DT_TRACKER_CONNECTING;
  }else{
    m_status = DT_TRACKER_READY;
    if(*cfg_verbose) CONSOLE.Debug("Connected to CTCS");
    if( Send_Protocol() != 0 && errno != EINPROGRESS ){
      CONSOLE.Warning(2, "warn, send protocol to CTCS failed:  %s",
        strerror(errno));
      return -1;
    }
    if( Send_Auth() != 0 && errno != EINPROGRESS ){
      CONSOLE.Warning(2, "warn, send password to CTCS failed:  %s",
        strerror(errno));
      return -1;
    }
    if( Send_Torrent(BTCONTENT.GetPeerId(), BTCONTENT.GetMetainfoFile()) < 0 &&
        errno != EINPROGRESS ){
      CONSOLE.Warning(2, "warn, send torrent to CTCS failed:  %s",
        strerror(errno));
      return -1;
    }
  }
  return 0;
}
Example #5
0
void *
send_request(void *arg){
    int sockfd;
    int optval = 1;
    while(1){
        sockfd = socket(AF_INET,SOCK_STREAM,0);
        if(sockfd <0){
            perror("socket error");
            pthread_exit(NULL);
        }
        int err = setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&optval,sizeof(optval));
        if(err <0){
            perror("setsockopt error");
            pthread_exit(NULL);
        }
        int result ;
        if((result = connect_nonb(sockfd,(struct sockaddr*)&serv,sizeof(struct sockaddr_in),10))<0){
            printf("result = %d\n",result);
            printf("connect timeout\n");
            pthread_exit(NULL);
        }
        struct message *msg = (struct message*)arg;
        printf("send TCP_SERV message to server\n");
        msg->msgtype = TCP_SERV;
        if(send(sockfd,(void*)msg,sizeof(struct message),0)!=sizeof(struct message)){
            perror("send error!");
            continue;
        }
        if(recv(sockfd,(void*)msg,sizeof(struct message),0)<0){
            perror("recv error");
            continue;
        }
        if(msg->msgtype == TCP_SERV_REPLY){
            printf("visit the server success!\n");
        }else if(msg->msgtype == TCP_SERV_FAULT){
            printf("should try again\n");
        }else{
            printf("receive error\n");
        }
        close(sockfd);
    }
    return NULL;
}
int main(int argc, char **argv){
	int sockFd, n;
	struct sockaddr_in serv_addr;	

	char recvLine[MAXLINE +1];
	if(argc != 2){
		char error_msg[256];
		sprintf(error_msg, "Usage: %s <IP Address>", argv[0]);
		error(error_msg);
	}

	sockFd = _Socket(AF_INET, SOCK_STREAM, 0);
	
	bzero(&serv_addr, sizeof(serv_addr));
	serv_addr.sin_family = AF_INET;
	serv_addr.sin_port = htons(9000);
	myLog("inet_pton");
	if(inet_pton(AF_INET, argv[1], &serv_addr.sin_addr) <=0){
		char error_msg[256];
		sprintf(error_msg, "ERROR: inet_pton for %s", argv[1]);
		error(error_msg);
	}
	myLog("connecting");	
	// _Connect(sockFd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
	int res;
	res = connect_nonb(sockFd, (struct sockaddr *) &serv_addr, sizeof(serv_addr), 0);
	printf("res=%d\n", res );
	while((n=read(sockFd, recvLine, MAXLINE)) > 0){
		recvLine[n] = 0;
		if(fputs(recvLine, stdout) == EOF)
			error("ERROR: fputs error");
	}

	if(n<0)
		error("ERROR read");
	
	return 0;

}
Example #7
0
static int lua__lcs_connect(lua_State *L)
{
    int ret;
    struct sockaddr_in addr;
    sock_client_t * client = CHECK_CLIENT(L, 1);
    const char *addrstr = luaL_checkstring(L, 2);
    int port = luaL_checkinteger(L, 3);
    int timeout = luaL_optinteger(L, 4, 1000);

    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(addrstr);
    addr.sin_port = htons(port);

    /* ret = connect(client->fd, (struct sockaddr *)&addr, sizeof(addr)); */
    ret = connect_nonb(client->fd, (const struct sockaddr *)&addr, sizeof(addr), timeout);
    if (ret != 0) {
        lua_pushboolean(L, 0);
        lua_pushfstring(L, "connect %s:%d failed", addrstr, port);
        return 2;
    }
    client->connected = 1;
    lua_pushboolean(L, 1);
    return 1;
}
Example #8
0
int btTracker::Connect()
{
	ssize_t r;
	time(&m_last_timestamp);

	if (_s2sin(m_host, m_port, &m_sin) < 0) {
		CONSOLE.Warning(2, "warn, get tracker's ip address failed.");
		return -1;
	}

	m_sock = socket(AF_INET, SOCK_STREAM, 0);
	if (INVALID_SOCKET == m_sock)
		return -1;

	// we only need to bind if we have specified an ip
	// we need it to bind here before the connect!!!!
	if (cfg_listen_ip != 0) {
		struct sockaddr_in addr;
		// clear the struct as requested in the manpages
		memset(&addr, 0, sizeof(sockaddr_in));
		// set the type
		addr.sin_family = AF_INET;
		// we want the system to choose port
		addr.sin_port = 0;
		// set the defined ip from the commandline
		addr.sin_addr.s_addr = cfg_listen_ip;
		// bind it or return...
		if (bind
			(m_sock, (struct sockaddr *) &addr,
			sizeof(struct sockaddr_in)) != 0) {
			CONSOLE.Warning(1,
				"warn, can't set up tracker connection:  %s",
				strerror(errno));
			return -1;
		}
	}

	if (setfd_nonblock(m_sock) < 0) {
		CLOSE_SOCKET(m_sock);
		return -1;
	}

	r = connect_nonb(m_sock, (struct sockaddr *) &m_sin);

	if (r == -1) {
		CLOSE_SOCKET(m_sock);
		return -1;
	} else if (r == -2)
		m_status = T_CONNECTING;
	else {
		if (arg_verbose)
			CONSOLE.Debug("Connected to tracker");
		if (0 == SendRequest())
			m_status = T_READY;
		else {
			CLOSE_SOCKET(m_sock);
			return -1;
		}
	}
	return 0;
}
Example #9
0
int main(int argc, char* argv[])
{
    struct sigaction action;
    action.sa_handler = handle_pipe;
    sigemptyset(&action.sa_mask);
    action.sa_flags = 0;
    sigaction(SIGPIPE, &action, NULL);
    int sockconn;
    struct sockaddr_in servaddr;
    if ((sockconn = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
    {
        perror("socket failure");
        exit(EXIT_FAILURE);
    }

    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(8888);
    if (inet_aton(argv[1], &servaddr.sin_addr) == 0)
    {
        perror("inet_aton error");
        exit(EXIT_FAILURE);
    }

    if (connect_nonb(sockconn, (struct sockaddr*)&servaddr, sizeof(servaddr), 20) < 0)
    {
        perror("connnect error");
        exit(EXIT_FAILURE);
    }
	fprintf(stderr, "connect success\n");
	char c = getchar();
	exit(EXIT_SUCCESS);
    //char recvbuf[1024] = {0};
    //char sendbuf[1024] = {0};
    //while(1){
    //    memset(recvbuf, 0, sizeof(recvbuf));
    //    memset(sendbuf, 0, sizeof(sendbuf));
    //    char * tmp = fgets(sendbuf, sizeof(sendbuf), stdin); // 键入EOF时,fgets返回一个空指针
    //    //fputs("fget from stdin\n", stderr);
    //    if (tmp != NULL)
    //    {
    //        //fputs("write to socket\n", stderr);
    //        // 如果服务器过早终止 当服务器tcp接受到来自客户的数据时,既然先前打开的那个套接口进程已经终止
    //        // 于是相应以一个RST, 通过使用tcpdump,来观察分组,我们可以验证该RST确实发送了
    //        // 然而客户端进程看不到这个RST,因为它在调用write后立即调用read,并且服务器已发送FIN,所调用的
    //        // read接收到FIN,立即返回0(表示EOF),我们的客户端未预期收到EOF,所以打印..server terminated prematurely
    //        if (write(sockconn, sendbuf, strlen(sendbuf)) < 0)
    //        {
    //            perror("write to socket error");
    //            exit(EXIT_FAILURE);
    //        }
    //    }
    //    else // 键入EOF时也返回空指针
    //    {
    //        fputs("get EOF\n", stderr);
    //        break;
    //    }
    //    //fputs("read from connfd\n", stderr);
    //    int ret = read(sockconn, recvbuf, sizeof(recvbuf));
    //    if (ret != 0)
    //        fputs(recvbuf, stdout);
    //    else if (ret == 0) // 已经写往服务器了,所以应该收到数据,如果返回0,说明服务器已经过早终止了
    //    {
    //        perror("str_cli: server terminated prematurely");
    //        exit(EXIT_FAILURE);
    //    }
    //    else
    //    {
    //        perror("read error");
    //        exit(EXIT_FAILURE);
    //    }
    //}
    close(sockconn); // 这里即使不close,在进程关闭的时候,仍然会会关闭
    return 0;
}
Example #10
0
void ASControl::client_func()
{
	int sockfd=-1;
	int len;
	struct sockaddr_in dest;
	char buffer[MAXBUF + 1];
	int myPort;
	HB4ASCTRL* hb_ptr;
	//int connect_c;
	struct timeval tva;
	fd_set inset, outset;
	int ret;
	myPort = selectTcpPort(reverseCfg(_localcfg.local_as));//clinet link to peer port

	/* 连接服务器 */
	//connect_c = 0;
	while(1) 
	{
		if(-1==sockfd)
		{
			for(int i=0; i<1; i++)
			{
				/* 创建一个 socket 用于 tcp 通信 */
				if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 
				{
					perror("C:Socket");
					printf("C:Socket sterror:%s\n",strerror(errno));
					exit(errno);
				}
				
				printf("C:socket created %d\n",sockfd);
				/* 初始化服务器端(对方)的地址和端口信息 */
				bzero(&dest, sizeof(dest));
				dest.sin_family = AF_INET;
				dest.sin_port = htons(myPort);
				dest.sin_addr.s_addr = inet_addr(_localcfg.peer_ip);
				printf("C:address created,to connect %s,port %d.%s\n", inet_ntoa(dest.sin_addr), ntohs(dest.sin_port),timeStamp());
				

				//added by wangxx 20120809 begin
				int    optval=1;
				if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&optval, sizeof(optval))==-1)
				{
					close(sockfd);
					sockfd = -1;
					break;
				}
				//added by wangxx 20120809 end
				/*
				 //deleted by wangxx 20120809 because 非阻塞模式会导致报错connect Operation already in progress
				 //改用int connect_nonb(int sockfd, const SA *saptr, socklen_t salen, int nsec)   函数
				unsigned long ul = 1;
				//设置为非阻塞模式
		     		ioctl(sockfd, FIONBIO, &ul);  
		     		*/

				//阻塞模式下,IP不存在,会168秒超时
				//if (connect(sockfd, (struct sockaddr *) &dest, sizeof(dest)) < 0)
				//modified by wangxx 20120809 23:58
				if(connect_nonb(sockfd, (struct sockaddr *)&dest, sizeof(dest), 3))
				{
					//perror("C:Connect");
					printf("C:Connect sterror:%s,retry 3s later\n",strerror(errno));
					close(sockfd);
					sockfd=-1;
					sleep(3);
					break;
				}
				printf("C:server connected,%s\n",timeStamp());
			}
		}
		
		if(-1!=sockfd)
		{
			for(int i=0; i<1; i++)
			{
				/* 接收对方发过来的消息,最多接收 MAXBUF 个字节 */
				bzero(buffer, MAXBUF + 1);

				//sockfd  可读时才读
				tva.tv_sec=3;	  
				tva.tv_usec=0; 
				FD_ZERO(&inset);
				FD_SET(sockfd, &inset);
				ret = select(sockfd+1, &inset, NULL, NULL, &tva);
				if(-1 == ret) 
				{
					sleep(1);
					//perror("C:select");
					printf("C:inset select sterror:%s\n",strerror(errno));
					continue;
				}
				else if(0 == ret)
				{
					printf("C:none hb arrive in 3 seconds,need reconnect\n");
					close(sockfd);
					sockfd=-1;
					break;
				}

				/* 接收服务器来的消息 */		
				len = recv(sockfd, buffer, MAXBUF, 0);
				if(len > 0) 
				{
					//printf("C:接收消息成功:'%s',共%d个字节的数据\n", buffer, len);
				}
				else 
				{
					printf("C:消息接收失败!错误代码是%d,错误信息是'%s'\n", errno, strerror(errno));
					close(sockfd);
					sockfd=-1;
					break;
				}

				//sockfd  可写时才写added by wangxx 20120810 1:02 begin
				tva.tv_sec=3;	  
				tva.tv_usec=0; 
				FD_ZERO(&outset);
				FD_SET(sockfd, &outset);
				ret = select(sockfd+1, NULL, &outset, NULL, &tva);
				if(-1 == ret) 
				{
					sleep(1);
					//perror("C:select");
					printf("C:outset select sterror:%s\n",strerror(errno));
					continue;
				}
				else if(0 == ret)
				{
					printf("C:sockfd can't be written in 3 seconds, need reconnect\n");
					close(sockfd);
					sockfd=-1;
					break;
				}
				//sockfd  可写时才写added by wangxx 20120810 1:02 end
				
				/*send hb reply,report STATUS*/
				hb_ptr=(HB4ASCTRL* )buffer;
				hb_ptr->header = ASHB_HDR;
				hb_ptr->invoke = HB_REPLY;
				hb_ptr->board_as = _curr_as;
				hb_ptr->dnar_alive=_dnar_status;
				len = send(sockfd, (void*)buffer, sizeof(HB4ASCTRL), 0);	

				if(len < 0) 
				{
					printf("C:消息'%s'发送失败!错误代码是%d,错误信息是'%s'\n", buffer,
					errno, strerror(errno));
					close(sockfd);
					sockfd=-1;
					break;
				}
				else 
				{
					//printf("C:消息'%s'发送成功,共发送了%d个字节!\n", buffer, len); 
				}
			}
		}
	}
	/* 关闭连接 */
	close(sockfd);
	sockfd=-1;
}
Example #11
0
int btTracker::Connect()
{
  struct sockaddr_in sin;
  ssize_t r;

  m_result = DT_NORMAL;
  m_last_timestamp = now;

  if( _s2sin(m_spec->host, m_spec->port, &sin) < 0 ){
    CONSOLE.Warning(2, "warn, get tracker's ip address failed.");
    return -1;
  }

  m_sock = socket(AF_INET, SOCK_STREAM, 0);
  if( INVALID_SOCKET == m_sock ){
    CONSOLE.Warning(2, "warn, tracker socket allocation failed:  %s",
      strerror(errno));
    return -1;
  }

  /* we only need to bind if we have specified an ip
     we need it to bind here before the connect! */
  if( *cfg_listen_ip != 0 ){
    struct sockaddr_in addr;
    // clear the struct as requested in the manpages
    memset(&addr, 0, sizeof(sockaddr_in));
    // set the type
    addr.sin_family = AF_INET;
    // we want the system to choose port
    addr.sin_port = 0;
    // set the defined ip from the commandline
    addr.sin_addr.s_addr = *cfg_listen_ip;
    // bind it or return...
    if( bind(m_sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in))
          != 0 ){
      CONSOLE.Warning(1, "warn, can't set up tracker connection:  %s",
        strerror(errno));
      return -1;
    }
  }

  if( setfd_nonblock(m_sock) < 0 ){
    CONSOLE.Warning(2, "warn, tracker socket setup failed:  %s",
      strerror(errno));
    CLOSE_SOCKET(m_sock);
    m_sock = INVALID_SOCKET;
    return -1;
  }

  r = connect_nonb(m_sock, (struct sockaddr *)&sin);
  if( r == -1 ){
    CONSOLE.Warning(2, "warn, connect to tracker at %s failed:  %s",
      m_spec->url, strerror(errno));
    CLOSE_SOCKET(m_sock);
    m_sock = INVALID_SOCKET;
    return -1;
  }else if( r == -2 ){
    if(*cfg_verbose) CONSOLE.Debug("Connecting to tracker at %s", m_spec->url);
    m_status = DT_TRACKER_CONNECTING;
  }else{
    if(*cfg_verbose) CONSOLE.Debug("Connected to tracker at %s", m_spec->url);
    if( 0 == SendRequest() ) m_status = DT_TRACKER_READY;
    else{
      CLOSE_SOCKET(m_sock);
      m_sock = INVALID_SOCKET;
      return -1;
    }
  }
  return 0;
}