Не получается привязать сокет к порту в Си

Не получается привязать сокет к порту на Си, пишет:

Bind socket failed: Socket operation on non-socket

#include <netinet/in.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <unistd.h>


#define PORT 6000 

int server_socket;

void create_socket() {
    int server_socket = socket(AF_INET, SOCK_STREAM, 0);
    if (server_socket < 0) {
        perror("Failed to create socket");
        exit(EXIT_FAILURE);
    } 
}

void create_struct() {
    struct sockaddr_in server_address;
    memset(&server_address, 0, sizeof(server_address));
    server_address.sin_family = AF_INET;
    server_address.sin_addr.s_addr = INADDR_ANY;
    server_address.sin_port = htons(PORT);

    if (bind(server_socket, (struct sockaddr *)&server_address, sizeof(server_address)) < 0) {
        perror("Bind socket failed");
        close(server_socket);
        exit(EXIT_FAILURE);
    }

    if (listen(server_socket, 10) < 0) {
        perror("Listen failed");
        close(server_socket);
        exit(EXIT_FAILURE);
    }
    printf("Server started on the port: %d", PORT);

    while(1) {
        struct sockaddr_in client_addr;
        socklen_t client_length = sizeof(client_addr);

        int client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_length);
        if (client_socket < 0) {
            perror("Accept failed");
            continue;
        }
        
        char client_ip[INET_ADDRSTRLEN];
        inet_ntop(AF_INET, &client_addr.sin_addr, client_ip, sizeof(client_ip));
        printf("Connect from: %s", client_ip);
        close(client_socket);
    }
}


int main() {
    create_socket();
    create_struct();
    return 0;
}

Ответы (1 шт):

Автор решения: citn

Вы объявляете переменную server_socket как локальную внутри функции create_socket() и она не влияет на глобальную переменную с тем же именем. Стоит просто убрать int.

int server_socket;  // Глобальная переменная

void create_socket() {
    server_socket = socket(AF_INET, SOCK_STREAM, 0);  // Убираем 'int' перед server_socket
    if (server_socket < 0) {
        perror("Failed to create socket");
        exit(EXIT_FAILURE);
    } 
}
→ Ссылка