Forum
Tipps
News
Menu-Icon

C: connect-Fehler

Programmiere C unter Linux, folgendes Problem: server programm läuft, wenn ich den client starte kommt fehlermeldung (durch perror("connect:"))

connect:: Address family not supported by protocol

dadurch wird keine Verbindung aufgebaut. Als socket wird mit scoket(AF_INET, SOCK_STREAM,0) erzeugt.

ich hoffe jemand kann mir helfen. danke


Antworten zu C: connect-Fehler:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

kannst du uns bitte etwas mehr code posten?

(der fehler sollte doch klarheit verschaffen. du benutzt eine adresse die von dem protokoll nicht unterstützt wird  das könnte ne IPv6 Adresse sein die bei einem IPv4 protokoll verwendet wird)

Eigentlich muesstest Du PF_INET statt AF_INET schreiben - aber das duerfte nicht wirklich das Problem sein, denn normalerweise ist irgendwo in den Headerdateien ( in bits/socket.h ) ein #define AF_INET PF_INET enthalten... Aber ein Versuch waers wert.

Ansonsten hast Du entweder nicht den richtigen Source gepostet ( steht da wirklich 0 als dritter Parameter oder doch eine Variable? ) oder der Kernel wurde ohne IPv4 unterstuetzung kompiliert, was ich aber bezweifeln mag.

0 ist sicher der 3. parameter, PF_INET werde ich versuchen, denk aber mal, dass das nicht der fehler ist. habs so auf suse linux 8.2 und mehreren suse linux 9.0 versucht, funkt aber nirgends.

werd morgen mehr code herschreiben, hab das prog im moment nicht da.

/*--------------------------- includes ------------------------------*/
#include <stdio.h>
#include <assert.h>
#include <string.h>

#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
/*--------------------------- defines -------------------------------*/

/*--------------------------- typedefs ------------------------------*/

/*--------------------------- globals -------------------------------*/

/*-------------------------- prototypes -----------------------------*/

/*----------------------------- main --------------------------------*/
int main( int argc, char *argv[] )
{

   int client_socket;
   char  wort[30]={"Verbindung aufgebaut!"};
   char * server;
   struct servent *serviceinfo;
   struct sockaddr_in ep_addr;
   struct hostent *hostinfo;
   int i,j;



   server="linux";

/*   hostinfo=gethostbyname("linux");
   serviceinfo=getservbyname("schiff","tcp");*/
   /*memcpy((char *) &ep_addr.sin_addr,hostinfo->h_addr,hostinfo->h_length);*/

   ep_addr.sin_addr.s_addr = inet_addr("169.254.0.2");

   ep_addr.sin_port=htons((u_char)9000);//serviceinfo->s_port;
   client_socket = socket(AF_INET,SOCK_STREAM,0);

   j=connect(client_socket,(struct sockaddr*)&ep_addr,sizeof(ep_addr));   //Hier tritt Fehler auf(durch perror("connect")): Address family not supported by protocol
   
   printf("%d %d %u %u\n",j,client_socket,ep_addr.sin_port);
   perror("connect:");

   if(j>=0){
      printf("verbunden mit linux");
      i=write(client_socket,wort,sizeof(wort));
      if(i<0)
         printf("Übertragung OK!");
      else
         printf("Übertragung fehlgeschlagen!");
      close(client_socket);
   }
   else
      printf("Fehler\n");



   return 0;
}


das ist der client, die formatierung hier ist natürlich komisch. der server funktioniert, die rückgabewerte beim server für bind und listen sind richtig, port und ip-addressen stimmen auch.

ich hoff jemand erkennt den fehler! mfg

Versuch doch mal ein

ep_addr.sin_family = AF_INET

dazuzupacken.


« Steuerbefehle für Q BasicWelches Buch für C? »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Linux
Linux bezeichnet ein kostenloses Betriebssystem, das als Open Source verfügbar ist. Die erste Version entstand 1991 und wurde von dem Finnen Linus Torvalds aus dem S...

IP-Adresse
Die IP-Adresse ist eine Adresse in einem Computernetzwerk, das auf dem Internet-Protokoll (IP) basiert. Sie besteht aus vier Zahlenblöcken mit Zahlen von 0 bis 255, ...

MAC-Adresse
Eine Media-Access-Control-Adresse (MAC-Adresse) ist die Hardware-Adresse jedes einzelnen Netzwerkadapters. Jede Netzwerkkarte ist mit einer zwölfstelligen Bezeichnun...