Linux Socket - connect() Problem

Ronn

Grünschnabel
Hallo, hab ein Problem mit der connect() Methode. Arbeite derzeit unter Linux. Wie kann es sein das die connect() Methode nach dem Aufruf hängt, also der darauf folgende Code nicht ,oder vielleicht viel später, ausgeführt wird? Was kann ich dagegen tun? Viel quälender ist die Frage warum er überhaupt einen Socket erstellt? :confused: Da ich das connect() damit eigentich abfange.Also er gar nicht versuchen soll zu connecten wenn kein Socket erstellt wurde. Was eigentlich auch logisch ist. Für eventuelle Hilfen wäre ich echt dankbar. MfG Ronnsen
 
Hier der Code:

Code:
ESocket::ESocket()
{
	connectError = -1;
	sock = -1;
	bCreated = false;
	myPort = 0;

	myIps = ETelematikApplication::ourFunctions->mySettings->GetIpVector();
	myPort = atoi(ETelematikApplication::ourFunctions->mySettings->GetPort().c_str());

	if ( myIps.size() > 0 && myPort > 0 )
		if( createSocket() == 0 )
			bCreated = true;
}

ESocket::~ESocket() {}

//---------------------------------------------------------------
/**
 * create a socket
 * @return -1 on error or 0 if no error occured
 */
int ESocket::createSocket()
{
	// obtain descriptor for socket ( TCP/IP )
	sock = socket ( AF_INET, SOCK_STREAM, 0 );
	if (sock == -1)
    {
		EGeneralMethods::SendMessage ( "Error couldn't initialized socket...\n",ERROR_LOG,".log" );
		return -1;
    }
	// create struct and init
	memset ( &addr, 0, sizeof ( addr ) );
	addr.sin_family      = AF_INET;
	addr.sin_port        = htons ( myPort );

	// connect
		#ifdef DEBUG
			//printf("wait in socket retrySock %d | socket %d...\n", retrySock,sock);
		#endif

		// count of ips
		for(uint i=0;i<myIps.size();i++)
		{
			addr.sin_addr.s_addr = inet_addr ( myIps[i].c_str() );
			( *ETelematikApplication::ourFunctions->Fncusecsleep ) ( 1,0 );
			connectError = connect ( sock, ( sockaddr* ) &addr, sizeof ( addr ) );

			if ( connectError == -1 )
			{
				EGeneralMethods::SendMessage ( "Error couldn't connect to server...\n",ERROR_LOG,".log" );
				//retrySock++;
			}
			else
				break;
		}

	if ( connectError == -1 )
		return -1;
	return 0;
}

Hatte noch was gefunden über "non-blocking mode fcntl". Damit kann man irgendwie den timeout der connect() Methode runtersetzen. Der liegt wohl bei 10 min.Aber wie soll ich das machen?
 
Zurück