Article View: es.comp.os.linux.programacion
Article #13202Re: Problema de sockets
From: Adrian Rossiter
Date: Wed, 14 Mar 2001 08:57
Date: Wed, 14 Mar 2001 08:57
65 lines
3007 bytes
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-mailReferences:
<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)