{
struct in_addr ip_address;
struct hostent * phe;
- int ok = inet_aton(host, &ip_address);
+ int ok =
+ (host != NULL) &&
+ (*host != '\0') &&
+ inet_aton(host, &ip_address);
if (!ok && (phe = gethostbyname(host))) {
Copy( phe->h_addr, &ip_address, phe->h_length, char );
}
void
+sockaddr_family(sockaddr)
+ SV * sockaddr
+ PREINIT:
+ STRLEN sockaddr_len;
+ char *sockaddr_pv = SvPV(sockaddr, sockaddr_len);
+ CODE:
+ if (sockaddr_len < offsetof(struct sockaddr, sa_data)) {
+ croak("Bad arg length for %s, length is %d, should be at least %d",
+ "Socket::sockaddr_family", sockaddr_len,
+ offsetof(struct sockaddr, sa_data));
+ }
+ ST(0) = sv_2mortal(newSViv(((struct sockaddr*)sockaddr_pv)->sa_family));
+
+void
pack_sockaddr_un(pathname)
char * pathname
CODE: