🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #11274

problemas con sockets y fork() --- stdout?

#11274
From: BloKe
Date: Mon, 03 Dec 2001 21:33
113 lines
3074 bytes
Hola gente,

estoy desarrollando un bot de irc, y segun lo hago me voy topando con
ciertos problemas, pero he llegado a uno del cual no puedo pasar. EN el
programa en si llamo a fork() para crear un proceso hijo q llame a una
funcion q se ejecuta cada 30 minutos. La cosa es q esta funcion (mete_saca)
en lugar de escribir en el irc (lo q haria si la ejecuto fuera del proceso
hijo) lo hace en la consola. He probado a poner dentro del proceso hijo

  dup2(sock, STDOUT_FILENO);
  dup2(sock, STDIN_FILENO);

pero ahora en lugar de escribir en el irc o la consola no aparentenmente no
escribe en ningun lado. Apreciaria mucho vuestra ayuda.

Aqui pongo el main y la funcion en cuestion a ver si me podias dar alguna
idea mas.

Muchas gracias,

BloKe



//el main

main()
{
 struct sockaddr_in them;
 char gbuf[buf], sbuf[buf], bufa[buf];
 char serv[buf], *suppaddr;
 int pid = fork();

if(pid==0)
{
mete_saca();
}

else

 them.sin_addr.s_addr = inet_addr(SERVIDOR);
 them.sin_port = htons(PUERTO);
 them.sin_family = AF_INET;

 sock = socket(AF_INET, SOCK_STREAM, 0);

 if ((connect(sock,(struct sockaddr *)&them,sizeof(them)))<0)
 {
         suppaddr = lookup(SERVIDOR);
         them.sin_addr.s_addr = inet_addr(suppaddr);
          if ((connect(sock,(struct sockaddr *)&them,sizeof(them)))<0) {
  printf("No puedo conectar con %s\n\n", SERVIDOR);
  close(sock);
  exit();
  }
         }

 bzero(gbuf, strlen(gbuf));

 do_irc_reg(gbuf);

 irc_read();

}



//el mete_saca()

void mete_saca()
{
 char sbuf[buf], gbuf[buf];
 FILE *file, *fopen();
 char path[buf];

 sprintf(path, "archivos/chanlist\0");
 file = fopen(path, "r");

 if (file)
 {
  while(fgets(gbuf, sizeof(gbuf), file))
  {
   sprintf(sbuf, "join %s\n\r", gbuf);
   ksend(sbuf);
   bzero(sbuf, strlen(sbuf));
   bzero(gbuf, strlen(gbuf));
  }

  fclose(file);
 }

 sleep(1800);

 sprintf(sbuf, "join 0\r");
 ksend(sbuf);

 bzero(sbuf, strlen(sbuf));

 mete_saca();

}

//y aki os pongo la funcion q uso para escribir en el irc

ksend(char *string)
{
 write(sock, string, strlen(string));
 bzero(string, strlen(string));
}



Gracias de nuevo.
Technical Details
Message-ID: <9ugqbf$9d8$1@talia.mad.ttd.net>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.cwix.com!newsfeed.bcn.ttd.net!news.mad.ttd.net!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII-7-bit
X-Google-Thread: f86c8,8997bc5c6184d641,start
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2001-12-03 13:33:39 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.cwix.com!newsfeed.bcn.ttd.net!news.mad.ttd.net!not-for-mail
From: "BloKe" <bloke@noquierospamtelepolis.com>
Newsgroups: es.comp.os.linux.programacion
Subject: problemas con sockets y fork() --- stdout?
Date: Mon, 3 Dec 2001 22:33:28 +0100
Organization: Telefonica Transmision de Datos
Lines: 116
Message-ID: <9ugqbf$9d8$1@talia.mad.ttd.net>
NNTP-Posting-Host: 213-4-15-106.uc.nombres.ttd.es
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2600.0000
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000