+#ifdef SO_LINGER
+ {
+ struct linger linger_options;
+ linger_options.l_onoff = 1;
+ linger_options.l_linger = 5;
+ if (0 != setsockopt(fd, SOL_SOCKET, SO_LINGER, &linger_options, sizeof(linger_options)))
+ {
+ log_error(LOG_LEVEL_ERROR, "Setting SO_LINGER on socket %d failed.", afd);
+ }
+ }
+#endif
+
+#ifndef _WIN32
+ if (afd >= FD_SETSIZE)
+ {
+ log_error(LOG_LEVEL_ERROR,
+ "Client socket number too high to use select(): %d >= %d",
+ afd, FD_SETSIZE);
+ close_socket(afd);
+ return 0;
+ }
+#endif
+