X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/704bd093be7aac0c68613a57420b75615801d04b..be98a33b511cec5cd3fce281360cea1dfc73d15a:/src/anet.c diff --git a/src/anet.c b/src/anet.c index 63002f6c..e7763e4c 100644 --- a/src/anet.c +++ b/src/anet.c @@ -307,15 +307,10 @@ int anetUnixServer(char *err, char *path) return s; } -int anetAccept(char *err, int serversock, char *ip, int *port) -{ +static int anetGenericAccept(char *err, int s, struct sockaddr *sa, socklen_t *len) { int fd; - struct sockaddr_in sa; - unsigned int saLen; - while(1) { - saLen = sizeof(sa); - fd = accept(serversock, (struct sockaddr*)&sa, &saLen); + fd = accept(s,sa,len); if (fd == -1) { if (errno == EINTR) continue; @@ -326,7 +321,27 @@ int anetAccept(char *err, int serversock, char *ip, int *port) } break; } + return fd; +} + +int anetTcpAccept(char *err, int s, char *ip, 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 (port) *port = ntohs(sa.sin_port); return fd; } + +int anetUnixAccept(char *err, int s) { + int fd; + struct sockaddr_un sa; + socklen_t salen = sizeof(sa); + if ((fd = anetGenericAccept(err,s,(struct sockaddr*)&sa,&salen)) == ANET_ERR) + return ANET_ERR; + + return fd; +}