aboutsummaryrefslogtreecommitdiffstats
path: root/bitlbee.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2005-12-27 15:39:32 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2005-12-27 15:39:32 +0100
commite4d62711995840def3a2d51f62923d95cb368cee (patch)
treeb53c3762820dc54aa997a05be8da33bdf2340b2f /bitlbee.c
parent238f828cb3524a2a09337d7502cc6db9556fc67a (diff)
IPv6 socket improvements. Daemon mode can now also listen on IPv6 sockets.
Also, when reverse lookup fails, BitlBee now correctly falls back to an ASCII-formatted IP instead of "localhost.".
Diffstat (limited to 'bitlbee.c')
-rw-r--r--bitlbee.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/bitlbee.c b/bitlbee.c
index 45cb388d..3d7e4c4f 100644
--- a/bitlbee.c
+++ b/bitlbee.c
@@ -67,24 +67,41 @@ gboolean bitlbee_io_new_client( GIOChannel *source, GIOCondition condition, gpoi
int bitlbee_daemon_init()
{
+#ifdef IPV6
+ struct sockaddr_in6 listen_addr;
+#else
struct sockaddr_in listen_addr;
+#endif
int i;
GIOChannel *ch;
log_link( LOGLVL_ERROR, LOGOUTPUT_SYSLOG );
log_link( LOGLVL_WARNING, LOGOUTPUT_SYSLOG );
- global.listen_socket = socket( AF_INET, SOCK_STREAM, 0 );
+ global.listen_socket = socket( AF_INETx, SOCK_STREAM, 0 );
if( global.listen_socket == -1 )
{
log_error( "socket" );
return( -1 );
}
- listen_addr.sin_family = AF_INET;
+
+#ifdef IPV6
+ listen_addr.sin6_family = AF_INETx;
+ listen_addr.sin6_port = htons( global.conf->port );
+ i = inet_pton( AF_INETx, global.conf->iface, &listen_addr.sin6_addr );
+#else
+ listen_addr.sin_family = AF_INETx;
listen_addr.sin_port = htons( global.conf->port );
- listen_addr.sin_addr.s_addr = inet_addr( global.conf->iface );
+ i = inet_pton( AF_INETx, global.conf->iface, &listen_addr.sin_addr );
+#endif
+
+ if( i != 1 )
+ {
+ log_message( LOGLVL_ERROR, "Couldn't parse address `%s'", global.conf->iface );
+ return( -1 );
+ }
- i = bind( global.listen_socket, (struct sockaddr *) &listen_addr, sizeof( struct sockaddr ) );
+ i = bind( global.listen_socket, (struct sockaddr *) &listen_addr, sizeof( listen_addr ) );
if( i == -1 )
{
log_error( "bind" );