Hola<br><br>Ante todo aclaro que el S.O. que uso es Ubuntu y el compilador es gcc. <br><br>Estoy comenzando a programar sockets y me encontre con la siguiente duda:<br><br>Tengo el siguiente codigo fuente que actua como un servidor que no hace otra cosa mas que enviar la cadena de caracteres " Prueba socket" (este codigo fuente es un ejemplo modificado de uno que aparece en la guia guia beej de programacion de redes). Notese que en el mismo aparecen algunos printf del tipo printf("f1"), printf("f2"), etc.<br>
<br>.............................................................................................................................................................................................................................<br>
  <br><br>/*<br>    ** server.c -- Ejemplo de servidor de sockets de flujo<br>*/<br><br>    #include <stdio.h><br>    #include <stdlib.h><br>    #include <unistd.h><br>    #include <errno.h><br>    #include <string.h><br>
    #include <sys/types.h><br>    #include <sys/socket.h><br>    #include <netinet/in.h><br><br>    #define MYPORT 5500    // Puerto al que conectarán los usuarios<br><br>    #define BACKLOG 10     // Cuántas conexiones pendientes se mantienen en cola<br>
<br><br>    int main(void)<br>    {<br>        printf("f1");<br><br>    int sockfd, new_fd;  // Escuchar sobre sock_fd, nuevas conexiones sobre new_fd<br>    struct sockaddr_in my_addr;    // información sobre mi dirección<br>
    struct sockaddr_in their_addr; // información sobre la dirección del cliente<br>    int sin_size;<br><br>    int yes=1;<br><br>   printf("f2");<br><br>    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {<br>
          perror("socket");<br>          exit(1);<br>    }<br><br>    printf("f3");<br><br>    if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) {<br>           perror("setsockopt");<br>
           exit(1);<br>    }<br>        <br>    my_addr.sin_family = AF_INET;         // Ordenación de bytes de la máquina<br>    my_addr.sin_port = htons(MYPORT);     // short, Ordenación de bytes de la red<br>    my_addr.sin_addr.s_addr = INADDR_ANY; // Rellenar con mi dirección IP<br>
    memset(&(my_addr.sin_zero), '\0', 8); // Poner a cero el resto de la estructura<br><br>        <br>    printf("f4");<br><br>    if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr) )== -1) {<br>
            perror("bind");<br>            exit(1);<br>    }<br><br>   printf("f5");<br><br>    if (listen(sockfd, BACKLOG) == -1) {<br>            perror("listen");<br>            exit(1);<br>
    }<br><br>    printf("f6");<br><br>   sin_size = sizeof(struct sockaddr_in);<br>      <br><br>    if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) <br>             perror("accept");<br>
    <br>         <br>    printf("server: got connection from %s\n",inet_ntoa(their_addr.sin_addr));<br><br>                <br>    if (send(new_fd, "Prueba socket\n", 14, 0) == -1)<br>        perror("send");<br>
                <br><br>    <br>    printf("f7");<br>        <br>    close(sockfd);    <br>    close(new_fd);  <br>    <br>     exit(0);<br>     <br>     return 0;<br>    <br><br>} <br>.............................................................................................................................................................................................................................<br>
<br>El tema es el siguiente, el codigo fuente anterior se compila sin problemas, pero cuando lo ejecuto ocurre lo siguiente:<br><br>En la consola donde lo ejecuto no aparece ningun mensaje, es decir no aparece ninguno de los printf del tipo printf("f1"). Solo cuando ejecuto el cliente o bien empleo telnet para conecterme al servidor en cuestion aparecen en la consola dichos mensajes. Para ser mas claro supongamos que el programa se llama servidor, entonces abro una terminal y ejecuto dicho programa, ocurre lo siguiente:<br>
<br>$ ./servidor (ejecuto el programa)<br>                   (el cursor se queda titilando en esta linea y no aparece ningun texto)<br><br>Ahora abro otra terminal y ejecuto telnet o cualquier otro cliente para conectarme con el servidor y obtengo la cadena enviada por el programa servidor sin problemas. <br>
<br>La ventana donde ejecute el programa servidor pasa a quedar asi:<br><br>$ ./servidor<br>f1f2f3f4f5f6server: got connection from 190.190.9.104<br>f7 $ <br><br><br>Es decir aparece todo el texto. <br><br>Lo que necesitaria conocer es alguna explicación tecnica de porque el texto de los printf no va apareciciendo a medida que se ejecuta el programa.<br>
<br><br>Saludos.<br><br><br><br><br><br><br><br><br>