Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 20. Nov 2018 18:30

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Socket-Programmierung
BeitragVerfasst: 05. Jul 2006 12:48 
Offline

Registriert: 05. Jul 2006 12:46
Beiträge: 1
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&#40;int argc, char **argv&#41;&#123; 
  int c; 
  int sockfd = 0; 
  int conresult = 0; 
  int portnr = 0; 
  char  *ipaddress=NULL, *fifoname=NULL; 
  struct sockaddr_in address; 


  while&#40;&#40;c = getopt&#40;argc,argv,"p&#58;i&#58;"&#41;&#41; != -1&#41;&#123; 
    switch&#40;c&#41;&#123; 
    case 'p'&#58; 
      portnr = atoi&#40;optarg&#41;; 
      break; 
    case 'i'&#58; 
      ipaddress = optarg; 
      break; 
    default&#58; 
      abort&#40;&#41;; 
    &#125; 
  &#125; 

  if&#40;portnr == 0&#41;&#123; 
    portnr = 80; 
  &#125; 

  if&#40;ipaddress == NULL&#41;&#123; 
    ipaddress = "127.0.0.1"; 
  &#125; 

  if&#40;&#40;sockfd = socket&#40;AF_INET,SOCK_STREAM,0&#41;&#41; < 0&#41;&#123; 
    perror&#40;"oops&#58; Cannot create socket"&#41;; 
    exit&#40;1&#41;; 
  &#125; 

  address.sin_family = AF_INET; 
  address.sin_port = htons&#40;portnr&#41;; 
  inet_aton&#40;ipaddress,&address.sin_addr&#41;; 

  if&#40;&#40;conresult = connect&#40;sockfd,&#40;struct sockaddr*&#41; &address, sizeof&#40;address&#41;&#41;&#41; == -1&#41;&#123; 
    perror&#40;"oops&#58; Cannot connect to socket"&#41;; 
    exit&#40;1&#41;; 
  &#125; 

  printf&#40;"\e&#91;2J"&#41;;   
  printf&#40;"Port &#58; %d\nIP &#58; %s\nFIFO &#58; %s\nsocketfd &#58; %d\n",portnr,ipaddress,fifoname,sockfd&#41;; 

  if&#40;conresult == 0&#41;&#123; 
    printf&#40;"Verbindung hergestellt!\n"&#41;; 
  &#125; 

  close&#40;sockfd&#41;; 
  return EXIT_SUCCESS; 
&#125;  
mfg

Reiner


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05. Jul 2006 13:42 
Offline
prolinux-forum-admin

Registriert: 26. Jun 2004 21:18
Beiträge: 1444
Code:
#include <unistd.h>  /* sleep&#40;&#41; oder usleep&#40;&#41; */
unsigned int interval;
int i, try;

for &#40;i = 0; i <= try; i++&#41; &#123;
	if &#40;connect &#40;...&#41; < 0&#41; &#123;
		sleep &#40;interval&#41;;
	else
		break;  /* oder statt break gleich den weiteren Code ins else */
&#125;
MfG, Klopskuchen

_________________
When all else fails, read the instructions .


Nach oben
   
 Betreff des Beitrags: Re: Socket-Programmierung
BeitragVerfasst: 16. Aug 2006 12:42 
Zitat:
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


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de