Article View: es.comp.os.linux.programacion
Article #2126cosa extraña en C
From: Ricardo Catalinas Jimenez
Date: Fri, 22 Apr 2005 17:51
Date: Fri, 22 Apr 2005 17:51
88 lines
3714 bytes
3714 bytes
El caso es que estaba jugando con un socket pero el programa que hacia me
hacia un extra�o.
La funcion en la que sucede todo es:
*********** code *************
int client_mode(void) {
printf("Hello");
// create a socket
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
// connect
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(port);
inet_pton(AF_INET, host, &myaddr.sin_addr);
if (connect(sockfd, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1) {
perror("connect");
exit(1);
}
// prepare FD list
FD_ZERO(&fdlist);
FD_SET(0, &fdlist);
FD_SET(sockfd, &fdlist);
// keep track of the biggest file descriptor
fdmax = sockfd; // so far, it's this one
// client's main loop
for(;;) {
if (select(fdmax+1, &fdlist, NULL, NULL, NULL) == -1) {
perror("select");
exit(1);
}
if (FD_ISSET(0, &fdlist)) {
FD_SET(sockfd, &fdlist);
scanf("%s", buffer);
if (send(sockfd, buffer, nbytes, 0) == -1)
perror("send");
} else {
FD_SET(0, &fdlist);
if ((nbytes = recv(sockfd, buffer, sizeof(buffer), 0)) <= 0) {
// got error or connection closed by client
if (nbytes == 0) {
// connection closed
printf("%sConnection terminated%s\n", UNDERBLUE, GREEN);
close(sockfd);
return 0;
} else
perror("recv");
} else
printf("%s%s%s", BLUE, buffer, GREEN);
}
}
}
**************** end of code ***************
Al principio de la funcion hay un `printf' con un `hello' que deberia
imprimirse segun entrara en la funcion, no? Pues cuando ejecuto necesito darle
un par de veces a la tecla enter hasta que se empieza a ejecutar el codigo de
la funcion. Todo esto sin tocar el flujo de entrada, porque como se ve, solo
hay un `scanf' pero esta mas abajo. �Alguien tiene alguna idea de porque
sucede esto?
Otra cosa que me llama la atencion es que cuando algo sale mas y se ejecuta
alguna llamada a `perror', el mensaje de `perro' se imprime en pantalla antes
que el de `printf' que es la primera instruccion de la funcion.
Le estaria muy agradecido a todo el que pudiese echarme una mano
Un saludo y gracias.
Por si alguien lo quiere, el codigo entero (es bastante corto) lo e pegado en:
http://rafb.net/paste/results/sKWMxH26.html
--
Ricardo Catalinas Jimenez Madrid, Spain.
th1nk3r(at)server01(dot)org http://www.server01.org
GnuPG Key fingerprint = 662C EBF7 9220 0F14 C644 F90B DC3E A163 7F8D CDAE
Technical Details
Message-ID:
<QYaae.289504$r4.17831132@news-reader.eresmas.com>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!fr.ip.ndsoftware.net!feeder.enertel.nl!nntpfeed-01.ops.asmr-01.energis-idc.net!feeder.xsnews.nl!news-out2.kabelfoon.nl!newsfeed.kabelfoon.nl!xindi.nntp.kabelfoon.nl!teleglobe.net!62.81.31.29.MISMATCH!cyclone.auna.com!news-feeder.eresmas.com!news-reader.eresmas.com!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Thread: f86c8,41b6c3c07f91e1bd,start X-Google-Attributes: gidf86c8,public X-Google-Language: ENGLISH,ASCII Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!fr.ip.ndsoftware.net!feeder.enertel.nl!nntpfeed-01.ops.asmr-01.energis-idc.net!feeder.xsnews.nl!news-out2.kabelfoon.nl!newsfeed.kabelfoon.nl!xindi.nntp.kabelfoon.nl!teleglobe.net!62.81.31.29.MISMATCH!cyclone.auna.com!news-feeder.eresmas.com!news-reader.eresmas.com!not-for-mail From: Ricardo Catalinas Jimenez <nospam@nospam.com> User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.6) Gecko/20050323 X-Accept-Language: en-us, en MIME-Version: 1.0 Newsgroups: es.comp.os.linux.programacion Subject: cosa extraña en C Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Lines: 88 Message-ID: <QYaae.289504$r4.17831132@news-reader.eresmas.com> Date: Fri, 22 Apr 2005 19:51:01 +0200 NNTP-Posting-Host: 62.174.242.172 X-Complaints-To: abuse@eresmas.com X-Trace: news-reader.eresmas.com 1114192816 62.174.242.172 (Fri, 22 Apr 2005 20:00:16 MET DST) NNTP-Posting-Date: Fri, 22 Apr 2005 20:00:16 MET DST Organization: eresMas