diff --git a/src/anet.c b/src/anet.c index 0c33fbf4..358802b1 100644 --- a/src/anet.c +++ b/src/anet.c @@ -431,14 +431,14 @@ static int anetGenericAccept(char *err, int s, struct sockaddr *sa, socklen_t *l return fd; } -int anetTcpAccept(char *err, int s, char *ip, int *port) { +int anetTcpAccept(char *err, int s, char *ip, size_t ip_len, int *port) { int fd; struct sockaddr_in sa; socklen_t salen = sizeof(sa); if ((fd = anetGenericAccept(err,s,(struct sockaddr*)&sa,&salen)) == ANET_ERR) return ANET_ERR; - if (ip) strcpy(ip,inet_ntoa(sa.sin_addr)); + if (ip) inet_ntop(sa.sin_family,(void*)&(sa.sin_addr),ip,ip_len); if (port) *port = ntohs(sa.sin_port); return fd; } @@ -453,7 +453,7 @@ int anetUnixAccept(char *err, int s) { return fd; } -int anetPeerToString(int fd, char *ip, int *port) { +int anetPeerToString(int fd, char *ip, size_t ip_len, int *port) { struct sockaddr_in sa; socklen_t salen = sizeof(sa); @@ -463,12 +463,12 @@ int anetPeerToString(int fd, char *ip, int *port) { ip[1] = '\0'; return -1; } - if (ip) strcpy(ip,inet_ntoa(sa.sin_addr)); + if (ip) inet_ntop(sa.sin_family,(void*)&(sa.sin_addr),ip,ip_len); if (port) *port = ntohs(sa.sin_port); return 0; } -int anetSockName(int fd, char *ip, int *port) { +int anetSockName(int fd, char *ip, size_t ip_len, int *port) { struct sockaddr_in sa; socklen_t salen = sizeof(sa); @@ -478,7 +478,7 @@ int anetSockName(int fd, char *ip, int *port) { ip[1] = '\0'; return -1; } - if (ip) strcpy(ip,inet_ntoa(sa.sin_addr)); + if (ip) inet_ntop(sa.sin_family,(void*)&(sa.sin_addr),ip,ip_len); if (port) *port = ntohs(sa.sin_port); return 0; } diff --git a/src/anet.h b/src/anet.h index efaa2cc9..ccc67c63 100644 --- a/src/anet.h +++ b/src/anet.h @@ -47,14 +47,14 @@ int anetRead(int fd, char *buf, int count); int anetResolve(char *err, char *host, char *ipbuf, size_t ipbuf_len); int anetTcpServer(char *err, int port, char *bindaddr); int anetUnixServer(char *err, char *path, mode_t perm); -int anetTcpAccept(char *err, int serversock, char *ip, int *port); +int anetTcpAccept(char *err, int serversock, char *ip, size_t ip_len, int *port); int anetUnixAccept(char *err, int serversock); int anetWrite(int fd, char *buf, int count); int anetNonBlock(char *err, int fd); int anetEnableTcpNoDelay(char *err, int fd); int anetDisableTcpNoDelay(char *err, int fd); int anetTcpKeepAlive(char *err, int fd); -int anetPeerToString(int fd, char *ip, int *port); +int anetPeerToString(int fd, char *ip, size_t ip_len, int *port); int anetKeepAlive(char *err, int fd, int interval); #endif