🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Problema de sockets

#13202
From: Adrian Rossiter
Date: Wed, 14 Mar 2001 08:57
65 lines
3007 bytes
On Wed, 14 Mar 2001 00:17:35 +0100, Cron wrote:
>Gracias por tu interes pero yo lo he probado y sigue dando el mismo
>problema, el cliente 1 no puede enviar al cliente 2, en cambio el cliente 2
>si que puede enviar al cliente 1.
>Y es cierto, la memoria compartida funciona correctamente. No entiendo que
>es lo que pasa :(

S�lo la memoria compartida me funcionaba, no los clientes.

En tu programa la conexi�n de socket de cliente 1 se crea en el
proceso de servidor antes de que el cliente 2 haga fork, as� que el
cliente 2 puede usar el descriptor del cliente 1. No obstante la
conexi�n de socket del cliente 2 se crea en el servidor despu�s del
cliente 1 ha hecho fork, occure en otro proceso, as� que el cliente 1
no puede usar el descriptor del cliente 2 (eso creo).

He escrito un programa corto con ficheros que creo que mostra
el problema que tienes, de usar descriptores creados en otros
procesos.

Adrian.

Adrian Rossiter   -   adrian_r@teleline.es
http://teleline.terra.es/personal/adrian_r



#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <signal.h>
#include <unistd.h>

int main()
{
   int pid;
   int fd1, fd2;
   int status;
   char buf[100];

   fd1 = open("file1", O_CREAT|O_RDWR, 0666);

   if ((pid = fork ()) == 0)
   {
      sleep(1);
      lseek(fd1, 0, SEEK_SET);
      read(fd1, buf, 100);
      fd2 = atoi(buf);
      printf("child:  fd2 = %d\n", fd2);
      if(read(fd2, buf, strlen(buf))==-1) {
         perror("child: read fd2");
      }
      exit(0);
   }
   fd2 = open("file2", O_CREAT|O_RDWR, 0666);
   printf("parent: file2 creado, fd2 = %d\n", fd2);

   sprintf(buf, "%d", fd2);
   write(fd1, buf, 100);
   write(fd2, buf, 100);
   wait(&status);
   return 0;
}
Technical Details
Message-ID: <slrn9aucki.16p.adrianr@localhost.adrian_r>
Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-03!supernews.com!nntp.cs.ubc.ca!fu-berlin.de!uni-berlin.de!212.106.225.145!not-for-mail
References: <98h49d$neg$1@diana.bcn.ttd.net> <98i9o8$6dm$2@news.unizar.es> <98id9l$s2g$1@diana.bcn.ttd.net> <slrn9arind.v8.adrianr@localhost.adrian_r> <98kksi$8g2$1@diana.bcn.ttd.net> <slrn9as244.vu.adrianr@localhost.adrian_r> <slrn9asdib.m4.adrianr@localhost.adrian_r> <98lfup$4kr$1@diana.bcn.ttd.net> <slrn9asl0s.189.adrianr@localhost.adrian_r> <98m9l9$2kb$1@diana.bcn.ttd.net>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,1e9b2d04f4f0632
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2001-03-14 00:58:09 PST
Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-03!supernews.com!nntp.cs.ubc.ca!fu-berlin.de!uni-berlin.de!212.106.225.145!not-for-mail
From: adrianr@jazzfree.com (Adrian Rossiter)
Newsgroups: es.comp.os.linux.programacion
Subject: Re: Problema de sockets
Date: Wed, 14 Mar 2001 08:57:54 +0000
Lines: 69
Message-ID: <slrn9aucki.16p.adrianr@localhost.adrian_r>
References: <98h49d$neg$1@diana.bcn.ttd.net> <98i9o8$6dm$2@news.unizar.es> <98id9l$s2g$1@diana.bcn.ttd.net> <slrn9arind.v8.adrianr@localhost.adrian_r> <98kksi$8g2$1@diana.bcn.ttd.net> <slrn9as244.vu.adrianr@localhost.adrian_r> <slrn9asdib.m4.adrianr@localhost.adrian_r> <98lfup$4kr$1@diana.bcn.ttd.net> <slrn9asl0s.189.adrianr@localhost.adrian_r> <98m9l9$2kb$1@diana.bcn.ttd.net>
Reply-To: adrian_r@teleline.es
NNTP-Posting-Host: 212.106.225.145
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: fu-berlin.de 984560257 2996113 212.106.225.145 (16 [70272])
User-Agent: slrn/0.9.6.2 (Linux)