Socket::Connect - error Interupetd System Call



  • Hallo Liebe Community.

    Ich habe ein kleines(Großes?) Problem bei einem Programm das ich schreibe.
    Dabei geht es um die programmierung einer Client Anwendung.
    Bei dem Aufruf der Connect Methode Kommt es immer zu einem Fehler (Interupt system call)
    Die .cpp

    #include <iostream>
    using namespace std;
    
    #include "socketx.h"
    #define MODBUS 502
    
    socketx::socketx(){
    
    };
    
    int socketx::init(string ip){
    
    	sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if (sock < 0) //Socket konnte nicht erstellt werden
    	{
    		throw SockExcept("[socket:TCP_create] Fehler beim Anlegen eines Sockets",1001);
    	}
    
    	//bzero((char *) &server_addr, sizeof(server_addr));
    	server_addr.sin_family			 =	AF_INET;
    	server_addr.sin_port			 =	htons(MODBUS); // MODBUS standard port
    	server_addr.sin_addr.s_addr		 =	inet_addr(ip.c_str());// ip in unsigned long int umwandeln
    
    	//memset((char*)&server_addr.sin_addr,&ip,sizeof(ip));
    	//bcopy((char *)ip_adrs->h_addr,(char *)&server_addr.sin_addr.s_addr,ip_adrs->h_length);
    	//SockRValue = ; // Socket verbinden
    	int err = 0;
    
    		err = connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));
    
    	if (err < 0)
    	{	 //Socket konnte nicht verbunden werden
    		cout<<"error: "<< strerror(sock) <<endl;
    
    		throw SockExcept("[socket:connect] Fehler beim aufbauen einer verbindung",1010);
    	}
    
    	return 0;
    };
    
    int socketx::TCP_send(char* obuf, int byteCount){//gibt anzah lder gesendeten bytes zurück
    
    	sockRValue = send(sock, obuf, byteCount, 0);
    
    	if (sockRValue == -1)
    	{
    		throw SockExcept("[socket:TCP_send] Fehler beim Senden der Daten",1011);
    	}
    
    	return sockRValue;
    };
    
    int socketx::TCP_recv(unsigned char* ibuf ,int byteCount){//gibt anzah lder empfangenne bytes zurück
    
    	sockRValue = recv(sock, ibuf, byteCount, 0); // gibt die Anzahl der empfangenen Bytes aus
    
    	if (sockRValue == -1){
    		throw SockExcept("[socket:TCP_recv] Fehler beim empfangen der Daten", 1012);
    	}
    
    	return sockRValue;
    };
    
    /*---- Die header Datei -----------*/
    using namespace std;
    
    class socketx{
    
    public:
    
    	socketx();	// Konstruktor
    	int init(string ipAdress);
    	int TCP_send(char* obuf, int byteCount);
    	int TCP_recv(unsigned char* ibuf, int byteCount);
    
    private:
    
    	int sock;				//id des sockets
    	int error;				// Vaiabel um error auf zu nehmen
    	int sockRValue;
    	struct hostent *ip_adrs;
    	struct sockaddr_in server_addr;
    	const char *adresse;
    	unsigned long ip;
    
    };
    
    class SockExcept{
    	private:
    		string except;
    		int eno;
    
    	public:
    
    		SockExcept(string s, int eno) : except(s) {this->eno= eno;}
    		~SockExcept(){}
    		string get_SockExcept(int &eno) {eno=this->eno; return except;}
    };
    

    Nun meine Frage:
    gibt es hier offensichtliche Fehler die einen solchen error verursachen können?
    und wie kann mann sowas vernmeiden? Liegt es evtl Daran das der server nach einen geschetiterten bzw. abgebrochenen Verbindung für eine geraume zeit kein weiteren verbindungen über diesen port zu lässt?

    Mfg BabCom


Anmelden zum Antworten