Socket-Programmierung

Antworten
Nachricht
Autor
Rebelhig
Beiträge: 1
Registriert: 05. Jul 2006 12:46

Socket-Programmierung

#1 Beitrag von Rebelhig » 05. Jul 2006 12:48

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: Alles auswählen

#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

klopskuchen
prolinux-forum-admin
Beiträge: 1444
Registriert: 26. Jun 2004 21:18
Kontaktdaten:

#2 Beitrag von klopskuchen » 05. Jul 2006 13:42

Code: Alles auswählen

#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 .

ElMi_

Re: Socket-Programmierung

#3 Beitrag von ElMi_ » 16. Aug 2006 12:42

Rebelhig hat 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

Antworten