당신은 다음 직접 sockaddr_in
의 해당 필드에 액세스 할 수 있습니다 수 있지만, 바이트 순서를 호스트로 네트워크 바이트 (빅 엔디안)의 값을 변환하는 기억으로 IP 주소와 포트해야하는 경우
를
let saddr: sockAddr = ...
let port = in_port_t(bigEndian: sockAddr.sin_port)
let addr = in_addr_t(bigEndian: sockAddr.sin_addr.s_addr)
getnameinfo()
는 (점선 진수 표기) 캐릭터 로 IP 주소를 추출하여도 포트를 선택적으로 사용할 수있다. struct sockaddr
포인터 에 struct sockaddr_in
포인터를 캐스팅 는 withMemoryRebound()
와 스위프트의 "리 바인딩"이라고하며 수행됩니다
이 IPv4 및 IPv6 모두 소켓 주소 구조 (
sockaddr_in
및) 작동
var sockAddr: sockaddr_in = ...
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
var service = [CChar](repeating: 0, count: Int(NI_MAXSERV))
withUnsafePointer(to: &sockAddr) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 0) {
_ = getnameinfo($0, socklen_t($0.pointee.sa_len),
&hostname, socklen_t(hostname.count),
&service, socklen_t(service.count),
NI_NUMERICHOST | NI_NUMERICSERV)
}
}
print("addr:", hostname)
print("port:", service)
. "안전하지 않은 포인터 전환 '에 대한 자세한 내용은
는 SE-0107 UnsafeRawPointer API 및 UnsafeRawPointer Migration 참조하십시오. 후자의 페이지에는 Swift 3에서 소켓 주소를 처리하는 예제 코드가 포함되어 있습니다.