vollständig zu zerstören Ich habe einen Chat-Client in Linux mit Socket gemacht, und ich möchte die Verbindung vollständig zu zerstören. Es folgt die relevanten Teile des Codes:Wie eine Socket-Verbindung in C
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;
aber die Nähe (Socke) scheinen doesnot zu schließen die die Verbindung zerstören, weil nachdem sie vollständig zu ‚Label‘ der Code verlässt die Fehlermeldung zeigt
Unable to bind: Address already in use
Das ist die Verbindung ist nicht wieder passiert. Was kann das Problem sein? Danke im Voraus.
EDIT: Was ich eigentlich will, ist, wenn ich das Skript von Anfang an nach der Zerstörung der Verbindung laufen, sollte es als ein neues Programm laufen. Wie kann ich es tun?
Warum machst du das? Sie sollten zu kurz vor dem 'accept' zurückkehren, den Server-Socket nicht neu erstellen. – Mat
Warum möchten Sie den hörenden Socket schließen und erneut öffnen, statt sich um accept() 'zu drehen? – dwalter
mögliches Duplikat von [Was ist die Bedeutung von SO_REUSEADDR (Option Setsockopt) - Linux?] (Http://StackOverflow.com/questions/3229860/what-is-the-meaning-of-so-reuseaddr-setsockopt-option- linux) –