[Socketprogrammierung] Immer Error @ bind

ROTTENqRn

Grünschnabel
folgender code liefert einen error @ bind

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

#define PORT    21784  
#define MAXCHAR 8192

..

int main(int argc, char *argv[]) {
        int                     listenfd, connfd, n;
        struct sockaddr_in      servaddr;
        char                    buffer[MAXCHAR+1];

        if (listenfd = socket(AF_INET, SOCK_STREAM, 0) < 0) {
                perror("socket");
                return listenfd;
                }

        memset(&servaddr, 0, sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
        servaddr.sin_port = htons(PORT);

        if (bind(listenfd, (struct sockaddr*) &servaddr, sizeof(servaddr)) < 0) {
                perror("bind");
                return 1;
                }
..

Fehler bei bind():
Socket operation on non-socket

woran kann das liegen?
 
Hi das Problem liegt in deiner if Abfrage...

socket kann listenfd keinen Handle zuweisen da deine Klammmerung falsch gesetzt ist...

Code:
if (listenfd = socket(AF_INET, SOCK_STREAM, 0) < 0)

Somit wird erst geprüft ob der zurückegegebene Handle von socket() < 0 ist, das Ergebniss
doeser Auswertung is nat. false (=0) und das wird dan listenfd zugewiesen, später versuchst du
dann einen bind() auf den socketHandle 0 und das kann natürlich nicht gutgehen....

Code:
if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

sollte Abhilfe schaffen...

Gruß

RedWing

//edit ein ganz gemeiner Fehler ;)
 
Zurück