| 
					
				 | 
			
			
				@@ -663,6 +663,10 @@ tor_socketpair(int family, int type, int protocol, int fd[2]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define ULIMIT_BUFFER 32 /* keep 32 extra fd's beyond _ConnLimit */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(HAVE_GETRLIMIT) && !defined(HAVE_RLIM_T) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+typedef unsigned long rlim_t; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** Learn the maximum allowed number of file descriptors. (Some systems 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * have a low soft limit. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -684,7 +688,7 @@ set_max_file_descriptors(unsigned long limit, unsigned long cap) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   struct rlimit rlim; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  unsigned long most; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  rlim_t most; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   tor_assert(limit > 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   tor_assert(cap > 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -693,16 +697,17 @@ set_max_file_descriptors(unsigned long limit, unsigned long cap) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              strerror(errno)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //log_notice(LD_CONFIG, "%llu %llu", rlim.rlim_cur, rlim.rlim_max); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if ((unsigned long)rlim.rlim_max < limit) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     log_warn(LD_CONFIG,"We need %lu file descriptors available, and we're " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              "limited to %lu. Please change your ulimit -n.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              limit, (unsigned long)rlim.rlim_max); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  most = ((unsigned long)rlim.rlim_max > cap) ? cap : (unsigned) rlim.rlim_max; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  most = rlim.rlim_max > (rlim_t)cap ? (rlim_t)cap : rlim.rlim_max; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (most > (unsigned long)rlim.rlim_cur) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     log_info(LD_NET,"Raising max file descriptors from %lu to %lu.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             (unsigned long)rlim.rlim_cur, most); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             (unsigned long)rlim.rlim_cur, (unsigned long)most); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   rlim.rlim_cur = most; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (setrlimit(RLIMIT_NOFILE, &rlim) != 0) { 
			 |