He creado un cliente de chat en Linux usando socket, y deseo destruir la conexión por completo. A continuación se presenta las partes pertinentes del Código:Cómo destruir por completo una conexión de socket en 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;
pero la estrecha (calcetín) parecen doesnot para cerrar el destruir la conexión por completo, porque después de ir al 'etiqueta' el código está saliendo que muestra el mensaje de error
Unable to bind: Address already in use
Esa es la conexión no está ocurriendo de nuevo. Cuál puede ser el problema? Gracias por adelantado.
EDITAR: Lo que realmente quiero es que, cuando ejecuto el script desde el principio después de destruir la conexión, debería ejecutarse como un programa nuevo. ¿Cómo puedo hacerlo?
¿Por qué estás haciendo eso? Debería regresar a justo antes del 'aceptar', no volver a crear el socket del servidor. – Mat
¿Por qué quiere cerrar y volver a abrir el socket de escucha en lugar de dar vueltas alrededor de 'accept()'? – dwalter
posible duplicado de [¿Cuál es el significado de SO_REUSEADDR (opción setsockopt) - Linux?] (Http://stackoverflow.com/questions/3229860/what-is-the-meaning-of-so-reuseaddr-setsockopt-option- linux) –