8 Stimmen

C-Sockets gibt Fehlercode 22 aus, EINVAL - ungültiges Argument

Der folgende Beispielcode funktioniert als Serverprozess. Aber wenn ich die Zeile

pid_t childpid;

unter

struct sockaddr_in servaddr, clientaddr;

Es scheitert an der Zeile

connectfd = accept(listenfd, (struct sockaddr *) &clientaddr, &clientaddrlen);

mit dem Fehlercode 22, EINVAL - ungültiges Argument. Ich bin neu in Sockets in C und ich konnte das Problem nicht verstehen, können Sie mir helfen, über dieses?

Gracias.

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h> 
#include <linux/in.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

extern int errno;

int main()
{
    int clientaddrlen, listenfd, connectfd, bytes_rcvd, listen_queue_size=1;
    short int port_no = 2000;
    char buffer[1000];
    struct sockaddr_in servaddr, clientaddr;

    printf("Server running at port #%d\n", port_no);

    // Create server socket.
    if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        fprintf(stderr, "Cannot create server socket! errno=%d \n", errno);
        exit(-1);
    }
    printf("Server socket created\n");

    // Bind (attach) this process to the server socket.
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(port_no);
    bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
    printf("Server socket is bound to port #%d\n", port_no);

    // Turn 'listenfd' to a listening socket. Listen queue size is 1.
    listen(listenfd,listen_queue_size);
    printf("Server listening with a queue of size %d. \n", listen_queue_size);

    // Wait for connection(s) from client(s).
    while (1)
    {
        connectfd = accept(listenfd, (struct sockaddr *) &clientaddr, &clientaddrlen);
        printf("A client has connected\n");
        if (recv(connectfd, buffer, sizeof(buffer), 0 ) > 0)
            printf("Received message: %s\n", buffer);
        close(connectfd);
        printf("Server closed connection to client\n");
    }

    close(listenfd);
    return 0;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X