Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ayuda Con C Sobre Linux

Estas en el tema de Ayuda Con C Sobre Linux en el foro de Programación General en Foros del Web. Buenas.... tengo el siguiente problema... toy programando en C sobre linux. tengo un proceso que genera un socket servridor, a este le asigno puerto=0 para ...
  #1 (permalink)  
Antiguo 10/06/2005, 22:23
 
Fecha de Ingreso: septiembre-2004
Mensajes: 26
Antigüedad: 20 años, 2 meses
Puntos: 0
Ayuda Con C Sobre Linux

Buenas.... tengo el siguiente problema...
toy programando en C sobre linux. tengo un proceso que genera un
socket servridor, a este le asigno puerto=0 para que me de el primer puerto libre que tiene la maquina.. luego si yo hago un netstat -natp me pone el puerto que esta usando el proceso , pero yo quisera en el codigo de mi programa poder saber cual es el puerto que tiene...
alguien me puede ayudar, se lo agradeceria.

yo hago asi

bzero(&sin,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=INADDR_ANY;
sin.sin_port=htons(iPort); // iPort=0 para que de el 1ero libre.
bind(iSocket,(struct sockaddr *)&sin,sizeof(sin);
listen(iSocket,10);
printf("MY PUERTO AUTOMATICO |%d|\n", ntohs(sin.sin_port) );

/// siempre me imprime 0

les agradeceria muchicimo..
Gumiesh.-
  #2 (permalink)  
Antiguo 11/06/2005, 02:13
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
El segundo parametro de bind es solo de entrada y listen no lo pide por lo tanto no hay ninguna modificacion y sigue siendo 0 por la asignacion que le haces antes de llamar a las funciones bind y listen.

Siguiendo tu codigo podes probar esto:

Código:
int len = sizeof(sin);
if (!getsockname(iSocket, (struct sockaddr *)&sin, &len))
{
  printf("MY PUERTO AUTOMATICO |%d|\n", ntohs(sin.sin_port) );
}
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 11/06/2005, 04:05
 
Fecha de Ingreso: septiembre-2004
Mensajes: 26
Antigüedad: 20 años, 2 meses
Puntos: 0
lo probe y nada..
el tema esta que el 0 hace que el sistema operativo te de el 1er puerto
libre que tiene, si vos en una consola haces un netstan -ntp
te dice que puerto esta siendo usado , pero no lo guarda en la estructura
del socket sino que creo qeu lo hace en una del sistema operativo
:S

agradezco mas ayuda !!!
  #4 (permalink)  
Antiguo 11/06/2005, 04:09
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Usa el bzero para limpiar sin antes de pasarselo a getsockname.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 11/06/2005, 13:51
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
Gumies... por cierto.. por favor no repitas mensajes.. con 1 solo post basta para poderte ayudar..

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #6 (permalink)  
Antiguo 12/06/2005, 19:23
 
Fecha de Ingreso: septiembre-2004
Mensajes: 26
Antigüedad: 20 años, 2 meses
Puntos: 0
De acuerdo

Mil Gracias.... funciono y de maravillas.. ahora puedo seguir con lo demas.

Con el tema de que se pusieron varios post, pido disculpas, pero fue el navegador que se habia colgado y la pagina no respondia , pero se ve que
como clickie varias hizo varios post despues.
  #7 (permalink)  
Antiguo 13/06/2005, 00:26
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
De nadas, yo ya lo habia probado en Windows
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:15.