Socket-Programmierung

Post Reply
Message
Author
Rebelhig
Posts: 1
Joined: 05. Jul 2006 12:46

Socket-Programmierung

#1 Post by Rebelhig »

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: Select all

#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
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#2 Post by klopskuchen »

Code: Select all

#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 Post by ElMi_ »

Rebelhig wrote: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

Post Reply