diff options
-rw-r--r-- | ext/Socket/Socket.xs | 5 | ||||
-rw-r--r-- | pp_sys.c | 24 |
2 files changed, 4 insertions, 25 deletions
diff --git a/ext/Socket/Socket.xs b/ext/Socket/Socket.xs index 0584e785b5..e08982909b 100644 --- a/ext/Socket/Socket.xs +++ b/ext/Socket/Socket.xs @@ -1006,12 +1006,15 @@ unpack_sockaddr_un(sun_sv) STRLEN sockaddrlen; char * sun_ad = SvPV(sun_sv,sockaddrlen); char * e; - +# ifndef __linux__ + /* On Linux sockaddrlen on sockets returned by accept, recvfrom, + getpeername and getsockname is not equal to sizeof(addr). */ if (sockaddrlen != sizeof(addr)) { croak("Bad arg length for %s, length is %d, should be %d", "Socket::unpack_sockaddr_un", sockaddrlen, sizeof(addr)); } +# endif Copy( sun_ad, &addr, sizeof addr, char ); @@ -98,12 +98,6 @@ extern int h_errno; # endif #endif -#ifdef I_SYS_UN -# ifdef __linux__ -# include <sys/un.h> -# endif -#endif - /* Put this after #includes because fork and vfork prototypes may conflict. */ #ifndef HAS_VFORK # define vfork fork @@ -1577,13 +1571,6 @@ PP(pp_sysread) if (!(IoFLAGS(io) & IOf_UNTAINT)) SvTAINTED_on(bufsv); SP = ORIGMARK; -#if defined(I_SYS_UN) && defined(__linux__) - /* Linux returns the sum of actual pathname string length and the - size of the other members of sockaddr_un members. It should - return sizeof(struct sockaddr_un). */ - if (((struct sockaddr *)namebuf)->sa_family == AF_UNIX) - bufsize = sizeof(struct sockaddr_un); -#endif sv_setpvn(TARG, namebuf, bufsize); PUSHs(TARG); RETURN; @@ -2464,12 +2451,6 @@ PP(pp_accept) setbuf( IoIFP(nstio), NULL); /* EPOC gets confused about sockets */ #endif -#if defined(I_SYS_UN) && defined(__linux__) - /* see the comment in pp_sysread */ - if (saddr.sa_family == AF_UNIX) - len = sizeof(struct sockaddr_un); -#endif - PUSHp((char *)&saddr, len); RETURN; @@ -2647,11 +2628,6 @@ PP(pp_getpeername) if (len == BOGUS_GETNAME_RETURN) len = sizeof(struct sockaddr); #endif -#if defined(I_SYS_UN) && defined(__linux__) - /* see the comment in pp_sysread */ - if (((struct sockaddr *)SvPVX(sv))->sa_family == AF_UNIX) - len = sizeof(struct sockaddr_un); -#endif SvCUR_set(sv, len); *SvEND(sv) ='\0'; PUSHs(sv); |