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