diff options
| author | 2006-08-01 11:46:19 +0000 | |
|---|---|---|
| committer | 2006-08-01 11:46:19 +0000 | |
| commit | 4488e477136ea3daa60a744bac272cc37a604136 (patch) | |
| tree | 49ec2884832cea192feb6a667f9ec8d352c14199 /src/socket.cpp | |
| parent | AF_INET -> define to AF_FAMILY, will be either AF_INET or AF_INET6 (diff) | |
The IPV6 stuff compiles now, with compile-correct ipv6 code. I dont know if this works yet.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4611 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/socket.cpp')
| -rw-r--r-- | src/socket.cpp | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/socket.cpp b/src/socket.cpp index 22069b87d..1b8455c65 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -44,14 +44,19 @@ bool BindSocket(int sockfd, insp_sockaddr client, insp_sockaddr server, int port if (*addr == '*') *addr = 0; - if (*addr && !inet_aton(addr,&addy)) + if (*addr && !insp_aton(addr,&addy)) { /* If they gave a hostname, bind to the IP it resolves to */ if (CleanAndResolve(resolved_addr, addr, true, 1)) { - inet_aton(resolved_addr,&addy); + insp_aton(resolved_addr,&addy); log(DEFAULT,"Resolved binding '%s' -> '%s'",addr,resolved_addr); +#ifdef IPV6 + /* Todo: Deal with resolution of IPV6 */ + server.sin6_addr = addy; +#else server.sin_addr = addy; +#endif resolved = true; } else @@ -60,19 +65,35 @@ bool BindSocket(int sockfd, insp_sockaddr client, insp_sockaddr server, int port return false; } } +#ifdef IPV6 + server.sin6_family = AF_FAMILY; +#else server.sin_family = AF_FAMILY; +#endif if (!resolved) { if (!*addr) { +#ifdef IPV6 + memcpy(&addy, &server.sin6_addr, sizeof(in6_addr)); +#else server.sin_addr.s_addr = htonl(INADDR_ANY); +#endif } else { +#ifdef IPV6 + memcpy(&addy, &server.sin6_addr, sizeof(in6_addr)); +#else server.sin_addr = addy; +#endif } } +#ifdef IPV6 + server.sin6_port = htons(port); +#else server.sin_port = htons(port); +#endif if (bind(sockfd,(struct sockaddr*)&server,sizeof(server)) < 0) { return false; @@ -247,3 +268,15 @@ int BindPorts(bool bail) return BoundPortCount; } + +const char* insp_ntoa(insp_inaddr n) +{ + static char buf[1024]; + inet_ntop(AF_FAMILY, &n, buf, sizeof(buf)); + return buf; +} + +int insp_aton(const char* a, insp_inaddr* n) +{ + return (inet_pton(AF_FAMILY, a, &n) < 0); +} |
