So zerstören Sie eine Socket-Verbindung vollständig in C

Ich habe einen Chat-Client unter Linux mit Socket erstellt und möchte die Verbindung vollständig zerstören. Es folgen die relevanten Teile des Codes:

int sock, connected, bytes_recieved , true = 1, pid;  
char send_data [1024] , recv_data[1024];     
struct sockaddr_in server_addr,client_addr;    
int sin_size;
label:
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
    perror("Socket");
    exit(1);
}
if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int)) == -1)
{
    perror("Setsockopt");
    exit(1);
}
server_addr.sin_family = AF_INET;         
server_addr.sin_port = htons(3128);     
server_addr.sin_addr.s_addr = INADDR_ANY; 
bzero(&(server_addr.sin_zero),8); 
if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))== -1)
{
    perror("Unable to bind");
    exit(1);
}
if (listen(sock, 5) == -1)
{
    perror("Listen");
    exit(1);
}
printf("\nTCPServer Waiting for client on port 3128");
fflush(stdout);
connected = accept(sock, (struct sockaddr *)&client_addr,&sin_size);
//necessary code
close(sock);
goto label;

Das Schließen (Socke) scheint die Verbindung jedoch nicht vollständig zu schließen, da der Code nach dem Aufrufen von "label" beendet wird und die Fehlermeldung angezeigt wird

Unable to bind: Address already in use

Das heißt, die Verbindung wird nicht wieder hergestellt. Woran kann das liegen? Danke im Voraus.

BEARBEITEN: Eigentlich möchte ich, dass das Skript, wenn ich es von Anfang an nach dem Trennen der Verbindung ausführe, als neues Programm ausgeführt wird. Wie kann ich es tun?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage