+ rv = SocketEngine::Listen(this->fd, ServerInstance->Config->MaxConn);
+
+ if (bind_to.family() == AF_UNIX)
+ {
+ const std::string permissionstr = tag->getString("permissions");
+ unsigned int permissions = strtoul(permissionstr.c_str(), NULL, 8);
+ if (permissions && permissions <= 07777)
+ chmod(bind_to.str().c_str(), permissions);
+ }
+
+ // Default defer to on for TLS listeners because in TLS the client always speaks first
+ int timeout = tag->getDuration("defer", (tag->getString("ssl").empty() ? 0 : 3));
+ if (timeout && !rv)
+ {
+#if defined TCP_DEFER_ACCEPT
+ setsockopt(fd, IPPROTO_TCP, TCP_DEFER_ACCEPT, &timeout, sizeof(timeout));
+#elif defined SO_ACCEPTFILTER
+ struct accept_filter_arg afa;
+ memset(&afa, 0, sizeof(afa));
+ strcpy(afa.af_name, "dataready");
+ setsockopt(fd, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));
+#endif
+ }