uncaught referencia read puede propiedad property parentnode obtener nula net mdata dt_cellindex definir cannot asp adata _dt_cellindex c linux sockets

referencia - uncaught typeerror cannot read property ''_ adata of undefined



Bind failed: Dirección ya en uso (6)

Estoy intentando vincular un socket a un puerto a continuación:

if( bind(socket_desc,(struct sockaddr *) &server, sizeof(server)) < 0) { perror("bind failed. Error"); return 1; } puts("bind done");

Pero da:

$ ./serve Socket created bind failed. Error: Address already in use

¿Por qué ocurre este error?


Como se mencionó anteriormente, el puerto ya está en uso. Esto podría deberse a varias razones

  1. alguna otra aplicación ya lo está usando.
  2. El puerto está en estado close_wait cuando su programa está esperando que el otro extremo cierre el programa.refer ( https://unix.stackexchange.com/questions/10106/orphaned-connections-in-close-wait-state ).
  3. El programa puede estar en el estado time_wait . puede esperar o usar la opción de socket SO_REUSEADDR como se menciona en otra publicación.

Hacer netstat -a | grep <portno> netstat -a | grep <portno> para verificar el estado del puerto.


El error generalmente significa que el puerto que está intentando abrir ya está siendo utilizado por otra aplicación, intente usar netstat para ver qué puertos están abiertos y luego use un puerto disponible.

También verifique si está vinculando a la dirección IP correcta (supongo que sería localhost)


Todos son correctos. Sin embargo, si también está ocupado probando su código, su propia aplicación podría "poseer" el socket si se inicia y se detiene con relativa rapidez. Pruebe SO_REUSEADDR como una opción de socket:

¿Qué hace exactamente SO_REUSEADDR?

Esta opción de socket le dice al kernel que incluso si este puerto está ocupado (en el estado TIME_WAIT), adelante y reutilícelo de todos modos. Si está ocupado, pero con otro estado, aún recibirá una dirección que ya está en uso. Es útil si su servidor se ha apagado y luego se ha reiniciado de inmediato mientras los sockets todavía están activos en su puerto. Debe tener en cuenta que si ingresa algún dato inesperado, puede confundir su servidor, pero mientras esto sea posible, no es probable.

Se ha señalado que "Un socket es una tupla 5 (proto, local addr, puerto local, remote addr, puerto remoto). SO_REUSEADDR simplemente dice que puede reutilizar direcciones locales. ¡Las 5 tuplas todavía deben ser únicas!" por Michael Hunter ([email protected]). Esto es cierto, y es por eso que es muy poco probable que su servidor vea datos inesperados. El peligro es que esa 5 tupla todavía flota en la red, y mientras rebota, una nueva conexión del mismo cliente, en el mismo sistema, obtiene el mismo puerto remoto. Esto es explicado por Richard Stevens en `` 2.7 Por favor, explique el estado de TIME_WAIT ''''.


Usted tiene un proceso que ya está usando ese puerto. netstat -tulpn le permitirá a uno encontrar la ID del proceso que está usando un puerto particular.


Yo también estaba enfrentando el mismo problema. Pero lo resolví :)
Asegúrese de que ambos programas para ClientSide y ServerSide estén en PROYECTOS DIFERENTES en su IDE, en mi caso es NetBeans. Luego, suponiendo que esté usando localhost, le recomiendo que implemente ambos programas como dos proyectos diferentes. Gracias !


Address already in use significa que el port que está tratando de asignar para su ejecución actual ya está ocupado / asignado a algún otro proceso.

Si usted es un desarrollador y está trabajando en una aplicación que requiere muchas pruebas, es posible que tenga una instancia de su misma aplicación ejecutándose en segundo plano (puede que se haya olvidado de detenerla correctamente).

Entonces, si encuentra este error, simplemente vea qué aplicación / proceso está usando el puerto.

En Linux, intente utilizar netstat -tulpn . Este comando listará una lista de procesos con todos los procesos en ejecución.

Verifica si una aplicación está usando tu puerto. Si esa aplicación o proceso es otro importante, es posible que desee utilizar otro puerto que no utilice ningún proceso / aplicación.

De todos modos, puede detener el proceso que usa su puerto y dejar que su aplicación lo tome.

Si estás en el entorno de Linux prueba,

  • Use netstat -tulpn para mostrar los procesos
  • kill <pid> Esto terminará el proceso

Si está usando Windows,

  • Use netstat -a -o -n para verificar los usos del puerto
  • Use taskkill /F /PID <pid> para matar ese proceso