Exemplo n.º 1
0
void TSockSys::Connect(const uint64& SockId, const PSockHost& SockHost, const int& PortN) {
	// make sure it's a valid socket
	IAssert(IsSock(SockId));
	uv_tcp_t* SockHnd = SockIdToHndH.GetDat(SockId);
	// make sure we got a valid socket host
	IAssert(SockHost->IsOk());
	// get connection handle
	uv_connect_t* ConnectHnd = (uv_connect_t*)malloc(sizeof(uv_connect_t));
	// special handling for v4 and v6
	int ResCd = 0;
	if (SockHost->IsIpv4()) {
		// get address
		struct sockaddr_in Addr = uv_ip4_addr(SockHost->GetIpNum().CStr(), PortN);
		// establish connection
		ResCd = uv_tcp_connect(ConnectHnd, SockHnd, Addr, TSockSys::OnConnect);
	} else if (SockHost->IsIpv6()) {
		// get address
		struct sockaddr_in6 Addr = uv_ip6_addr(SockHost->GetIpNum().CStr(), PortN);
		// establish connection
		ResCd = uv_tcp_connect6(ConnectHnd, SockHnd, Addr, TSockSys::OnConnect);
	}
	// check for errors
	if (ResCd != 0) {
		// cleanup first
		free(SockHnd);
		// and throw exception
		throw TExcept::New("SockSys.Connect: Error establishing socket connection: " + SockSys.GetLastErr());
	}
}
Exemplo n.º 2
0
void TNntpSockEvent::OnGetHost(const PSockHost& _SockHost){
  if (_SockHost->IsOk()){
    SockHost=_SockHost;
    SockMOut.Clr();
    Sock=PSock(new TSock(this));
    Sock->Connect(SockHost, NntpClt->GetSrvPortN());
    Sock->PutTimeOut(10*1000);
  } else
  if (_SockHost->GetStatus()==shsTryAgain){
    GetHostTrys++;
    if (GetHostTrys<MxGetHostTrys){
      TSockHost::GetAsyncSockHost(NntpClt->GetSrvHostNm(), this);
    } else {
      OnNntpError("Can't get host info");
    }
  } else {
    OnNntpError("Invalid Host");
  }
}
Exemplo n.º 3
0
Arquivo: proxy.cpp Projeto: Accio/snap
void TCltSockSockEvent::OnGetHost(const PSockHost& SockHost){
  IAssert(Mode==csmGetingHost);
  if (SockHost->IsOk()){
    Mode=csmConnecting;
    CltSock->Sock=PSock(new TSock(this));
    CltSock->Sock->Connect(SockHost, CltSock->GetPortN());
    CltSock->Sock->PutTimeOut(1000);
  } else
  if (SockHost->GetStatus()==shsTryAgain){
    GetHostTrys++;
    if (GetHostTrys<MxGetHostTrys){
      TSockHost::GetAsyncSockHost(CltSock->GetHostNm(), this);
    } else {
      OnError(-1, "Can't get host info");
    }
  } else {
    OnError(-1, "Invalid host");
  }
}
Exemplo n.º 4
0
void TWebPgFetchEvent::OnGetHost(const PSockHost& SockHost) {
  if (SockHost->IsOk()){
    UrlStrV.Add(CurUrl->GetUrlStr());
    OppSockClosed=false;
    SockMem.Clr();
    Sock=TSock::New(this);
    int PortN;
    if (ProxyStr.Empty()){
      PortN=CurUrl->GetPortN();
    } else {
      TStr ProxyHostNm; TStr PortNStr;
      ProxyStr.SplitOnCh(ProxyHostNm, ':', PortNStr);
      PortN=PortNStr.GetInt(80);
    }
    Sock->PutTimeOut(TimeOutMSecs);
    Sock->Connect(SockHost, PortN);
  } else {
    OnFetchError("Invalid Host");
  }
}