summaryrefslogtreecommitdiff
path: root/ext/Socket
diff options
context:
space:
mode:
Diffstat (limited to 'ext/Socket')
-rw-r--r--ext/Socket/Socket.pm2
-rw-r--r--ext/Socket/Socket.xs17
2 files changed, 12 insertions, 7 deletions
diff --git a/ext/Socket/Socket.pm b/ext/Socket/Socket.pm
index 51dce5939e..327ef31b56 100644
--- a/ext/Socket/Socket.pm
+++ b/ext/Socket/Socket.pm
@@ -20,7 +20,7 @@ Socket, sockaddr_in, sockaddr_un, inet_aton, inet_ntoa - load the C socket.h def
$proto = getprotobyname('tcp');
socket(Socket_Handle, PF_INET, SOCK_STREAM, $proto);
- $port = getservbyname('smtp');
+ $port = getservbyname('smtp', 'tcp');
$sin = sockaddr_in($port,inet_aton("127.1"));
$sin = sockaddr_in(7,inet_aton("localhost"));
$sin = sockaddr_in(7,INADDR_LOOPBACK);
diff --git a/ext/Socket/Socket.xs b/ext/Socket/Socket.xs
index d37208f012..3664368cab 100644
--- a/ext/Socket/Socket.xs
+++ b/ext/Socket/Socket.xs
@@ -742,9 +742,10 @@ pack_sockaddr_un(pathname)
{
#ifdef I_SYS_UN
struct sockaddr_un sun_ad; /* fear using sun */
+ STRLEN len;
Zero( &sun_ad, sizeof sun_ad, char );
sun_ad.sun_family = AF_UNIX;
- Copy( pathname, sun_ad.sun_path, sizeof sun_ad.sun_path, char );
+ strncpy(sun_ad.sun_path, pathname, sizeof sun_ad.sun_path);
ST(0) = sv_2mortal(newSVpv((char *)&sun_ad, sizeof sun_ad));
#else
ST(0) = (SV *) not_here("pack_sockaddr_un");
@@ -758,9 +759,10 @@ unpack_sockaddr_un(sun_sv)
CODE:
{
#ifdef I_SYS_UN
- STRLEN sockaddrlen;
struct sockaddr_un addr;
- char * sun_ad = SvPV(sun_sv,sockaddrlen);
+ STRLEN sockaddrlen;
+ char * sun_ad = SvPV(sun_sv,sockaddrlen);
+ char * e;
if (sockaddrlen != sizeof(addr)) {
croak("Bad arg length for %s, length is %d, should be %d",
@@ -775,8 +777,11 @@ unpack_sockaddr_un(sun_sv)
"Socket::unpack_sockaddr_un",
addr.sun_family,
AF_UNIX);
- }
- ST(0) = sv_2mortal(newSVpv(addr.sun_path, strlen(addr.sun_path)));
+ }
+ e = addr.sun_path;
+ while (*e && e < addr.sun_path + sizeof addr.sun_path)
+ ++e;
+ ST(0) = sv_2mortal(newSVpvn(addr.sun_path, e - addr.sun_path));
#else
ST(0) = (SV *) not_here("unpack_sockaddr_un");
#endif
@@ -823,7 +828,7 @@ unpack_sockaddr_in(sin_sv)
port = ntohs(addr.sin_port);
ip_address = addr.sin_addr;
- EXTEND(sp, 2);
+ EXTEND(SP, 2);
PUSHs(sv_2mortal(newSViv((IV) port)));
PUSHs(sv_2mortal(newSVpv((char *)&ip_address,sizeof ip_address)));
}