import Network
let connection = NWConnection(host: "mail.example.com", port: .imaps, using: .tls)

connection.stateUpdateHandler = { (newState) in
	switch newState {
	case .ready:
		// 연결이 구성완료 되었을 때
		// TCP와 TLS는 핸드셰이킹이 끝난 상태
	case .waiting(let error):
		// 네트워크 연결이 구성되지 않고 경로를 찾고 있는 과정
	case .failed(let error):
		// 네트워크 연결이 끊어지거나 연결을 하지 못한 경우
	}
}

connection.start(queue: myQueue)

//셀룰러 제한
parameters.prohibitedInterfaceTypes = [.celluar]

//v6만 사용하도록 제한
if let ipOptions = parameters.defaultProtocolStack.internetProtocol as? NWProtocolIP.Options {
	ipOptions.version = .v6
}

// 프록시 비선호
parameters.preferNoProxies = true

do {
	if let listener = try NWListener(parameters: .udp)
	
	listener.service = NWListener.Service(type: "_camera._udp")
	
	listener.newConnectionHandler = { (newConnection) in
		newConnection.start(queue: myQueue)
	}
	listener.start(queue: myQueue)
} catch {
	// 리스너 생성 오류 처리
}

func sendFrame(_ connection: NWConnection, frame: Data) {
	connection.send(content: frame, completion: .contentProcessed { sendError in
		if let sendError = sendError {
			// 에러 처리
		} else {
			// 다음 데이터가 있는지 확인해서 재송출
			let nextFrame = generateNextFrame()
			sendFrame(connection, frame: nextFrame)
		}
	}
}