B
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