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!