Не закрывается 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;
}