     enum Timeouts: Double {
         case header = 40
         case body = 90
-        case keepAlive = 30
+        case keepAlive = 16
     }
     
     // if queue isn't given, main queue is used

            newPeer.role = .client
            newPeer.socket = newSocket
            self.peers.append(newPeer) // always add as a new peer, even if it already exists. This might result in a dupe if we are browsing and advertising for same service. The original will get removed on receiving the name of other device, if it matches
            DLog("accepting new connection from \(connectedHost). Peers(n=\(self.peers.count)) after adding:")
            DLog(self.peers)
            
            // CONVENTION: CLIENT sends SERVER 32 bytes of its name -- UTF-8 string
            newSocket.readData(toLength: 32, withTimeout: Timeouts.header.rawValue, tag: DataTag.tag_NAME.rawValue)

            // we're the server. If we are advertising and browsing for the same serviceType, there might be a duplicate peer situation to take care of -- one created by browsing, one when socket was accepted. Remedy: kill old one, keep this one
            for existingPeer in self.peers.filter({ $0.displayName == peer.displayName && $0 != peer }) {
                if let indexOfPeer = self.peers.index(of: existingPeer) {
                    DLog("about to remove dupe peer \(self.peers[indexOfPeer].displayName) from index \(indexOfPeer), had socket: \(self.peers[indexOfPeer].socket != nil ? "ACTIVE" : "nil"). Peers(n=\(self.peers.count)) before removal")
                    peer.connectAttemptFailCount += existingPeer.connectAttemptFailCount
                    peer.connectAttemptFailAuthRejectCount += existingPeer.connectAttemptFailAuthRejectCount
                    peer.connectCount += existingPeer.connectCount
