8 Stimmen

Wie kann ich diesen Zeiger in getaddrinfo behandeln?

Warnung: Bitte behandeln Sie mich wie den Anfänger, der ich bin. Dies ist mein erstes "richtiges" C-Programm. Wenn ich also einige Dinge nicht verstehe, ist das der Grund.

Ich versuche, einen Chatserver nach dem Beispiel aus Beej's Guide to Network Programming zu erstellen. Es wurde mir empfohlen, also los geht's.

Ich möchte, dass eine Funktion einen Zeiger auf eine Struktur akzeptiert, Eigenschaften in diesem Zeiger ändert und einen Listener auf dem übergebenen Port einrichtet. Im folgenden Code erhalte ich einen Segmentation Fault, und ich kann ehrlich gesagt nicht herausfinden, warum. Schieben Sie es darauf, dass ich grün bin. (Entwickeln in Netbeans 6.8 auf Ubuntu, falls erforderlich):

#define PORT "4400"

typedef struct {
    int port;
    fd_set *connections;
    int connections_count;
    int listener;
    struct addrinfo address;
    struct addrinfo socket_hints;
} Server;

typedef struct {
    struct sockaddr_storage address;    // User's address
    int fs_id;                  // ID to the socket they belong to
    char *name;                 // Pointer to the user's name
    struct User *nextUser;      // Next user in the list
} User;

void initialize_server(Server *passed_server, char *port) {
    struct addrinfo *temp;
    int result;

    // Set up the server hints
    memset(&passed_server->socket_hints, 0, sizeof(struct addrinfo));
    passed_server->socket_hints.ai_family = AF_UNSPEC;
    passed_server->socket_hints.ai_socktype = SOCK_STREAM;
    passed_server->socket_hints.ai_flags = AI_PASSIVE;

    result = getaddrinfo(NULL, port, &passed_server->socket_hints, &temp);
    printf("Result: %d\n", result);
}

int main(int argc, char** argv) {
    // Set up socket stuff
    Server *server; // Set up the server
    memset(server, 0, sizeof(Server));

    fd_set read_sockets; // Master socket holder and sockets to read
    int new_connection; // Holds the socket ID of the new connection
    socklen_t address_length; // Used to hold the length of the address from the user
    struct addrinfo;

    // Useful sets
    char buffer[1024];
    int bytes_recieved;
    int yes = 1; // For SETOPT

    // Set up server info on defined port
    initialize_server(server, PORT);
    FD_ZERO(&read_sockets);

    return (EXIT_SUCCESS);
}

Wenn Sie den vollständigen Code benötigen (ich glaube, ich habe alles Wesentliche gepostet), finden Sie unten einen Link. Vielen Dank im Voraus für jede Hilfe oder Versuch auf sie!

http://pastebin.org/529545

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