Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Socket-Programmierung

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Rebelhig



Anmeldungsdatum: 05.07.2006
Beiträge: 1

BeitragVerfasst am: 05. Jul 2006 12:48   Titel: Socket-Programmierung

Hallo,

ich versuche mich gerade mit der Programmierung von Sockets. Im Anhang habe ich einen kleinen Ausschnitt aus meinem Code.

Nun zu meiner Frage. Ich erstelle ein Clienttool, welches über socket(...) ein Socket erstellt und über connect(...) dann die Verbindung zum Server aufbaut. Das ganze funktioniert auch so lange, wie der Server da ist. Wenn jedoch die Verbindung zum Server über einen größeren Augenblick ausfällt, dann steht die Verbindung auch nicht mehr.

Gibt es Möglichkeiten, das sich das Socket selbst überwacht, bei Verbindungsabbruch solange versucht die Verbindung wieder aufzubauen bis der Server da ist, und wie kann man so etwas realisieren? Es wäre nett wenn ihr mir hier weiterhelfen könntet.

Hier ein kleiner Ausschnitt:

Code:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>


int main(int argc, char **argv){
  int c;
  int sockfd = 0;
  int conresult = 0;
  int portnr = 0;
  char  *ipaddress=NULL, *fifoname=NULL;
  struct sockaddr_in address;


  while((c = getopt(argc,argv,"p:i:")) != -1){
    switch(c){
    case 'p':
      portnr = atoi(optarg);
      break;
    case 'i':
      ipaddress = optarg;
      break;
    default:
      abort();
    }
  }

  if(portnr == 0){
    portnr = 80;
  }

  if(ipaddress == NULL){
    ipaddress = "127.0.0.1";
  }

  if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0){
    perror("oops: Cannot create socket");
    exit(1);
  }

  address.sin_family = AF_INET;
  address.sin_port = htons(portnr);
  inet_aton(ipaddress,&address.sin_addr);

  if((conresult = connect(sockfd,(struct sockaddr*) &address, sizeof(address))) == -1){
    perror("oops: Cannot connect to socket");
    exit(1);
  }

  printf("\e[2J");   
  printf("Port : %d\nIP : %s\nFIFO : %s\nsocketfd : %d\n",portnr,ipaddress,fifoname,sockfd);

  if(conresult == 0){
    printf("Verbindung hergestellt!\n");
  }

  close(sockfd);
  return EXIT_SUCCESS;



mfg

Reiner
 
Benutzer-Profile anzeigen Private Nachricht senden

klopskuchen
prolinux-forum-admin


Anmeldungsdatum: 26.06.2004
Beiträge: 1444

BeitragVerfasst am: 05. Jul 2006 13:42   Titel:

Code:

#include <unistd.h>  /* sleep() oder usleep() */
unsigned int interval;
int i, try;

for (i = 0; i <= try; i++) {
   if (connect (...) < 0) {
      sleep (interval);
   else
      break;  /* oder statt break gleich den weiteren Code ins else */
}


MfG, Klopskuchen
_________________
When all else fails, read the instructions .
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

ElMi_
Gast





BeitragVerfasst am: 16. Aug 2006 12:42   Titel: Re: Socket-Programmierung

Rebelhig hat folgendes geschrieben::
Gibt es Möglichkeiten, das sich das Socket selbst überwacht, bei Verbindungsabbruch solange versucht die Verbindung wieder aufzubauen bis der Server da ist, und wie kann man so etwas realisieren? Es wäre nett wenn ihr mir hier weiterhelfen könntet.


Schöne Antwort nur völlig an der Fragestellung vorbei. Es geht darum, einen Verbindungsabbruch zu überwachen und nicht darum, festzustellen, wann eine neue Verbindung hergestellt wurde.

Korrekt ginge das über ein send() oder recv(), wenn diese -1 zurückliefern und das Signal SIGPIPE kommt, dann ist die Verbindung tot.

ElMi
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy