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(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;
}
Reiner