Просмотр исходного кода

Do not use SO_REUSEADDR by default

to avoid misbehavior in some glibc versions
z3APA3A 10 лет назад
Родитель
Сommit
1ed5229a54
1 измененных файлов с 14 добавлено и 0 удалено
  1. 14 0
      src/socks.c

+ 14 - 0
src/socks.c

@@ -179,6 +179,20 @@ void * sockschild(struct clientparam* param) {
 #endif
 	 if ((param->remsock=so._socket(SASOCK(&param->req), command == 2? SOCK_STREAM:SOCK_DGRAM, command == 2?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) {RETURN (11);}
 	 param->operation = command == 2?BIND:UDPASSOC;
+#ifdef REUSE
+	if (command == 2){
+		int opt;
+
+#ifdef SO_REUSEADDR
+		opt = 1;
+		so._setsockopt(param->remsock, SOL_SOCKET, SO_REUSEADDR, (unsigned char *)&opt, sizeof(int));
+#endif
+#ifdef SO_REUSEPORT
+		opt = 1;
+		so._setsockopt(param->remsock, SOL_SOCKET, SO_REUSEPORT, (unsigned char *)&opt, sizeof(int));
+#endif
+	}
+#endif
 	 break;
 
 	default: