¿y las cabeceras?¿se han ido a por tabaco?<br><br><div><span class="gmail_quote">2008/1/30, nree <<a href="mailto:p_westermani@hotmail.com">p_westermani@hotmail.com</a>>:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hola gente!!!<br><br>trabajo con eclipse en un ubuntu y estoy haciendo un programilla con sockets. Para empezar lo de siempre, un servidor concurrente y un cliente que pide peticiones. Mi problema viene al crear los procesos hijos, se supone que envian al cliente un saludo y listo, pero... me tira el perror al hacer el send y despues de un rato lo hace. Es decir, me explico, el servidor se queda un rato con "bad file descriptor" y despues aparece en el cliente el mensaje. Y ademas la concurrencia no funciona.<br>
<br>Os dejo los codigos...<br><br>servidor.cpp<br><br>int main(void) {<br><br> int sock;<br> int sock_dialog;<br> struct sockaddr_in dir_ser;<br> struct sockaddr_in dir_cli;<br> int numbytes;// numbytes2;<br>
int yes=1;// conectado=0;<br> socklen_t len;<br> char buf[TAMBUF];<br> //char buf2[TAMBUF];<br><br><br> sock = socket(PF_INET, SOCK_STREAM,0);<br> if (sock < 0)<br> {<br>
perror("error de creación de socket");<br> //exit(1);<br> }<br> else<br> {<br> puts("socket creado...");<br> }<br><br> dir_ser.sin_family = PF_INET;<br>
dir_ser.sin_addr.s_addr = htonl (INADDR_ANY);<br> dir_ser.sin_port = htons (PORT);<br> memset(dir_ser.sin_zero, '\0', sizeof dir_ser.sin_zero);<br><br> if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1)<br>
{<br> perror("setsockopt");<br> //exit(1);<br> }<br><br> if (bind(sock, (struct sockaddr *)&dir_ser,sizeof dir_ser)< 0)<br> {<br> perror("error en la asignación de dirección");<br>
//exit(1);<br> }<br> else<br> {<br> puts("asignando direccion...");<br> }<br><br> if (listen (sock, NUM_CON) < 0)<br> {<br> perror("error en la escucha");<br>
//exit(1);<br> }else<br> puts("socket a la escucha...");<br><br> while(1)<br> {<br> len = sizeof dir_ser;<br> sock_dialog = accept(sock, (struct sockaddr *) &dir_cli, &len);<br>
if (!fork())<br> {<br> shutdown(sock,2);<br> strcpy(buf, "respuesta desde servidor...");<br> numbytes = send (sock_dialog, buf, sizeof(buf), 0);<br>
if (numbytes < 0)<br> {<br> perror("error en la transmision de datos...");<br> }<br> //tramitarChat((struct sockaddr_in *)sock_dialog);<br>
}<br> shutdown(sock_dialog,2);<br> }<br>}<br><br>cliente.cpp<br><br>int main (int argc, char *argv[])<br>{<br> int sock, i;<br> struct sockaddr_in dir_serv;<br> char buf[TAMBUF];<br>
<br> sock = socket (PF_INET, SOCK_STREAM, 0);<br> if (sock < 0)<br> {<br> perror("No se ha podido crear el socket");<br> exit (-1);<br> }else<br> puts ("socket creado...");<br>
<br> dir_serv.sin_family = PF_INET;<br> dir_serv.sin_port = htons (PORT);<br> inet_aton(argv[1], &(dir_serv.sin_addr));<br> memset(dir_serv.sin_zero, '\0', sizeof dir_serv.sin_zero);<br>
<br> if (connect (sock, (struct sockaddr*)&dir_serv, sizeof dir_serv) <0)<br> {<br> perror("conexión no aceptada");<br> exit(-1);<br> }else<br> puts("conectando con el servidor...");<br>
<br> i = recv (sock, buf, sizeof(buf),0);<br> puts(buf);<br> shutdown(sock,2);<br>}<br><br>gracias por vuestra colaboracion<br><br>nere<br>_______________________________________________<br>Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</blockquote></div><br>