From f73dfed5c23f1cd530546cba3bd484d786cadd20 Mon Sep 17 00:00:00 2001 From: David Hedbor <david@hedbor.org> Date: Tue, 24 Oct 1995 09:08:30 +0100 Subject: [PATCH] committing Rev: src/modules/files/file.c:1.8 --- src/modules/files/file.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/modules/files/file.c b/src/modules/files/file.c index a4ebbdfd15..71c1b9516a 100644 --- a/src/modules/files/file.c +++ b/src/modules/files/file.c @@ -722,7 +722,7 @@ static void file_set_buffer(INT32 args) extern int errno; int socketpair(int family, int type, int protocol, int sv[2]) { - struct sockaddr_in addr,addr2; + struct sockaddr_in addr,addr2, addr3; int len, fd; MEMSET((char *)&addr,0,sizeof(struct sockaddr_in)); @@ -753,6 +753,7 @@ int socketpair(int family, int type, int protocol, int sv[2]) if(bind(sv[1], (struct sockaddr *)&addr2, sizeof(addr2)) < 0) return -1; /* Check what ports we got.. */ + len=sizeof(addr); if(getsockname(fd,(struct sockaddr *)&addr,&len) < 0) return -1; if(getsockname(sv[1],(struct sockaddr *)&addr2,&len) < 0) return -1; @@ -769,14 +770,15 @@ int socketpair(int family, int type, int protocol, int sv[2]) * just the right time... uLPC is supposed to be * pretty safe... */ + addr3=addr2; do { len=sizeof(addr2); sv[0]=accept(fd,(struct sockaddr_in *)&addr2,&len); if(sv[0] < 0) return -1; } while(len < sizeof(addr2) || - addr2.sin_addr.s_addr != addr.sin_addr.s_addr || - addr2.sin_port != addr.sin_port); + addr2.sin_addr.s_addr != addr3.sin_addr.s_addr || + addr2.sin_port != addr3.sin_port); if(close(fd) <0) return -1; -- GitLab