diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2005-12-27 15:39:32 +0100 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2005-12-27 15:39:32 +0100 | 
| commit | e4d62711995840def3a2d51f62923d95cb368cee (patch) | |
| tree | b53c3762820dc54aa997a05be8da33bdf2340b2f /bitlbee.c | |
| parent | 238f828cb3524a2a09337d7502cc6db9556fc67a (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.c | 25 | 
1 files changed, 21 insertions, 4 deletions
| @@ -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" ); | 
