Не закрывается socket на C++ в linux

Я только начал изучать сокеты и столкнулся с проблемой, несмотря на то что я закрываю сокет (и судя по туториалам и документации я делаю всё верно) на следующем запуске сервера, он мне выдаёт: binding socket: Address already in use я также не смог найти никакой информации об этом зарезервированном сокете после закрытия сервера. Перезагрузка системы также не помогает. Код сервера и клиента представлен ниже: сервер:

#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <cstdlib>
#include <sys/un.h>
#include <cstdio>
#include "../port.hpp"

int main() {
    sockaddr_un cli_addr{};
    sockaddr_un serv_addr{AF_UNIX, PORT};
    char buf[3];
    int sockfd = socket(AF_UNIX,SOCK_STREAM,0);
    if (sockfd < 0) {
        perror("creating socket");
        return 1;
    }
    int servlen = strlen(serv_addr.sun_path) + sizeof(serv_addr.sun_family);
    if(bind(sockfd,(struct sockaddr *)&serv_addr,servlen) < 0) {
        perror("binding socket");
        close(sockfd);
        return 1;
    }
    
    listen(sockfd,5);
    socklen_t clilen = sizeof(cli_addr);
    int newsockfd = accept(sockfd,(struct sockaddr *)&cli_addr,&clilen);
    if (newsockfd < 0) {
        perror("accepting");
        close(newsockfd);
        close(sockfd);
        return 1;
    }
    printf("A connection has been established\n");
    int n=read(newsockfd, buf,3);
    write(1,buf,n);
    write(newsockfd,"I got your message\n",19);
    close(newsockfd);
    close(sockfd);
    return 0;
}

клиент:

#include <unistd.h>
#include <cstdlib>
#include <sys/socket.h>
#include <sys/un.h>
#include <cstdio>
#include <iostream>
#include "../port.hpp"

int main() {
    sockaddr_un server_addresses{AF_UNIX, PORT};
    char buffer[82];
    
    int servlen = strlen(server_addresses.sun_path) + sizeof(server_addresses.sun_family);
    int socket_fd = socket(AF_UNIX, SOCK_STREAM, 0);
    if (socket_fd < 0) {
        perror("Creating socket");
        close(socket_fd);
        return 1;
    }
    if (connect(socket_fd, (struct sockaddr *)&server_addresses, servlen) < 0) {
        perror("Connecting");
        close(socket_fd);
        return 1;
    }
    printf("Please enter your message: ");
    bzero(buffer,82);
    fgets(buffer,80,stdin);
    write(socket_fd, buffer, strlen(buffer));
    int n = read(socket_fd, buffer, 80);
    printf("The return message was\n");
    write(1,buffer,n);
    close(socket_fd);
    return 0;
}

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