aboutsummaryrefslogtreecommitdiffstats
path: root/bitlbee.c
diff options
context:
space:
mode:
Diffstat (limited to 'bitlbee.c')
-rw-r--r--bitlbee.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/bitlbee.c b/bitlbee.c
index b31c31fe..8f7be698 100644
--- a/bitlbee.c
+++ b/bitlbee.c
@@ -69,6 +69,15 @@ int bitlbee_daemon_init()
if( global.listen_socket < 0 )
continue;
+#ifdef IPV6_V6ONLY
+ if( res->ai_family == AF_INET6 )
+ {
+ i = 0;
+ setsockopt( global.listen_socket, IPPROTO_IPV6, IPV6_V6ONLY,
+ (char *) &i, sizeof( i ) );
+ }
+#endif
+
/* TIME_WAIT (?) sucks.. */
i = 1;
setsockopt( global.listen_socket, SOL_SOCKET, SO_REUSEADDR, &i, sizeof( i ) );
@@ -79,7 +88,6 @@ int bitlbee_daemon_init()
log_error( "bind" );
return( -1 );
}
-
break;
}
@@ -108,11 +116,13 @@ int bitlbee_daemon_init()
chdir( "/" );
- /* Sometimes std* are already closed (for example when we're in a RESTARTed
- BitlBee process. So let's only close TTY-fds. */
- if( isatty( 0 ) ) close( 0 );
- if( isatty( 1 ) ) close( 1 );
- if( isatty( 2 ) ) close( 2 );
+ if( getenv( "_BITLBEE_RESTART_STATE" ) == NULL )
+ for( i = 0; i < 3; i ++ )
+ if( close( i ) == 0 )
+ {
+ /* Keep something bogus on those fd's just in case. */
+ open( "/dev/null", O_WRONLY );
+ }
}
#endif