From ef839f9006ad1d6a05bed69f58bdf7d4af7f2901 Mon Sep 17 00:00:00 2001 From: Geoff Garside Date: Fri, 17 Jun 2011 19:47:49 +0100 Subject: [PATCH] Use inet_ntop(3) in anet. #apichange Replace inet_ntoa(3) calls with the more future proof inet_ntop(3) function which is capable of handling additional address families. API Change: anetTcpAccept() & anetPeerToString() additional argument additional argument required to specify the length of the character buffer the IP address is written to in order to comply with inet_ntop(3) function semantics. --- src/anet.c | 12 ++++++------ src/anet.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) 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