[linux; c] bind() schlaegt fehl - Hilfe

milchbubbi

Mitglied
Hallo zusammen...

ich habe ein kleines Programm geschrieben - es tut bisher noch nicht viel, ausser sich an einen Port zu haengen und auf eine Verbindung zu warten. Falls sich jemand verbindet wird auf der client-seite eine Nachricht auf dem Schirm ausgegeben und die Verbindung getrennt. Na ja, besser gesagt, es tut noch nicht einmal das. Es laesst sich compilieren - bei Ausfuehren aber gibt bind() -1 zurueck
Ich weiss einfach nicht mehr weiter, denn ich finde den fehler nicht. Ich hoffe, mir kann jemand helfen.

hier ist der quelcode:

Code:
#include <stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define NACHRICHT "Verbindung aufgebaut..."

#define FEHLER -1

int main (int argc, char **argv)
{
struct sockaddr_in destant_adr;
struct sockaddr_in my_addr, client;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(5001);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

int sockfd, connfd;
socklen_t sin_size = sizeof (client); // Laenge fuer accept?!

if( (getuid()|getgid()) != 0)
{
printf("bitte als root einloggen\n");
return FEHLER;
}

if (sockfd = socket (AF_INET, SOCK_STREAM, 0) == FEHLER)
{
printf ("socket() fehlgeschlagen - sockfd!\n");
return FEHLER;
}

if (bind(sockfd, (struct sockaddr*)&my_addr, sizeof(my_addr)) == FEHLER)
{
printf ("bind() fehlgeschlagen!\n");
return FEHLER;
}

if (listen(sockfd, 3) == FEHLER)
{
printf ("listen() fehlgeschlagen!");
return FEHLER;
}

while (1)
{
if (connfd = accept (sockfd, (struct sockaddr *) &client, &sin_size) == FEHLER)
{
printf ("accept() fehlgeschlagen!");
return FEHLER;
}
write(connfd, NACHRICHT, strlen(NACHRICHT));

close(connfd);
}



return 0;
}

ich danke im Voraus!

cu, Bubbi
 
Hallo,
den gleichen Fehler hat schonmal jemand gemacht.
Der Fehler liegt in deiner if Anweisung:

Code:
if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) == FEHLER)

Wenn diese Klammern nicht da sind wird sockfd niemals der Wert vom geöffneten
Socket zugewiesen.
=> dein bind läuft schief, da du es an einen unbekannten socket versuchst.


Gruß

RedWing
 
hi!

thx RedWing... das war genau der Grund, warum das nicht funktioniert hat. Ich habe mich so sehr auf bind() fixiert, dass ich den Fehler nirgendwo sonst gesucht habe. Den selben habe ich natuerlich auch noch bei accept() gemacht, so dass die Ausgaben, die eigentlich an die client-seite gerichtet waren auf der server-seite kamen :)

naj, aber jetzt laeufts ja - noch ein Mal danke!
 
Zurück