mirror of
https://github.com/fluencelabs/redis
synced 2025-03-21 01:50:50 +00:00
Add anetTcp6Server() function.
Refactor the common code from anetTcpServer into internal function which can be used by both anetTcpServer and anetTcp6Server.
This commit is contained in:
parent
72a3922617
commit
56df827198
17
src/anet.c
17
src/anet.c
@ -372,7 +372,7 @@ static int anetV6Only(char *err, int s) {
|
|||||||
return ANET_OK;
|
return ANET_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int anetTcpServer(char *err, int port, char *bindaddr)
|
static int _anetTcpServer(char *err, int port, char *bindaddr, int af)
|
||||||
{
|
{
|
||||||
int s, rv;
|
int s, rv;
|
||||||
char _port[6]; /* strlen("65535") */
|
char _port[6]; /* strlen("65535") */
|
||||||
@ -380,7 +380,7 @@ int anetTcpServer(char *err, int port, char *bindaddr)
|
|||||||
|
|
||||||
snprintf(_port,6,"%d",port);
|
snprintf(_port,6,"%d",port);
|
||||||
memset(&hints,0,sizeof(hints));
|
memset(&hints,0,sizeof(hints));
|
||||||
hints.ai_family = AF_INET;
|
hints.ai_family = af;
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
hints.ai_flags = AI_PASSIVE; /* No effect if bindaddr != NULL */
|
hints.ai_flags = AI_PASSIVE; /* No effect if bindaddr != NULL */
|
||||||
|
|
||||||
@ -392,6 +392,9 @@ int anetTcpServer(char *err, int port, char *bindaddr)
|
|||||||
if ((s = socket(p->ai_family,p->ai_socktype,p->ai_protocol)) == -1)
|
if ((s = socket(p->ai_family,p->ai_socktype,p->ai_protocol)) == -1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (AF_INET6 == af && anetV6Only(err,s) == ANET_ERR)
|
||||||
|
goto error; /* could continue here? */
|
||||||
|
|
||||||
if (anetListen(err,s,p->ai_addr,p->ai_addrlen) == ANET_ERR)
|
if (anetListen(err,s,p->ai_addr,p->ai_addrlen) == ANET_ERR)
|
||||||
goto error; /* could continue here? */
|
goto error; /* could continue here? */
|
||||||
goto end;
|
goto end;
|
||||||
@ -408,6 +411,16 @@ end:
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int anetTcpServer(char *err, int port, char *bindaddr)
|
||||||
|
{
|
||||||
|
return _anetTcpServer(err, port, bindaddr, AF_INET);
|
||||||
|
}
|
||||||
|
|
||||||
|
int anetTcp6Server(char *err, int port, char *bindaddr)
|
||||||
|
{
|
||||||
|
return _anetTcpServer(err, port, bindaddr, AF_INET6);
|
||||||
|
}
|
||||||
|
|
||||||
int anetUnixServer(char *err, char *path, mode_t perm)
|
int anetUnixServer(char *err, char *path, mode_t perm)
|
||||||
{
|
{
|
||||||
int s;
|
int s;
|
||||||
|
@ -46,6 +46,7 @@ int anetUnixNonBlockConnect(char *err, char *path);
|
|||||||
int anetRead(int fd, char *buf, int count);
|
int anetRead(int fd, char *buf, int count);
|
||||||
int anetResolve(char *err, char *host, char *ipbuf, size_t ipbuf_len);
|
int anetResolve(char *err, char *host, char *ipbuf, size_t ipbuf_len);
|
||||||
int anetTcpServer(char *err, int port, char *bindaddr);
|
int anetTcpServer(char *err, int port, char *bindaddr);
|
||||||
|
int anetTcp6Server(char *err, int port, char *bindaddr);
|
||||||
int anetUnixServer(char *err, char *path, mode_t perm);
|
int anetUnixServer(char *err, char *path, mode_t perm);
|
||||||
int anetTcpAccept(char *err, int serversock, char *ip, size_t ip_len, int *port);
|
int anetTcpAccept(char *err, int serversock, char *ip, size_t ip_len, int *port);
|
||||||
int anetUnixAccept(char *err, int serversock);
|
int anetUnixAccept(char *err, int serversock);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user