Skip to content

Instantly share code, notes, and snippets.

@0x30
Created May 30, 2022 10:52
Show Gist options
  • Save 0x30/cce67ffc6d7587e1d3581a12379a901d to your computer and use it in GitHub Desktop.
Save 0x30/cce67ffc6d7587e1d3581a12379a901d to your computer and use it in GitHub Desktop.
IOS Check Tcp Port Can use
func tcpPortIsCanUse(port: in_port_t) -> Bool {
let socketFileDescriptor = socket(AF_INET, SOCK_STREAM, 0)
if socketFileDescriptor == -1 {
return false
}
defer {
Darwin.shutdown(socketFileDescriptor, SHUT_RDWR)
close(socketFileDescriptor)
}
var addr = sockaddr_in()
let sizeOfSockkAddr = MemoryLayout<sockaddr_in>.size
addr.sin_len = __uint8_t(sizeOfSockkAddr)
addr.sin_family = sa_family_t(AF_INET)
addr.sin_port = Int(OSHostByteOrder()) == OSLittleEndian ? _OSSwapInt16(port) : port
addr.sin_addr = in_addr(s_addr: inet_addr("0.0.0.0"))
addr.sin_zero = (0, 0, 0, 0, 0, 0, 0, 0)
var bind_addr = sockaddr()
memcpy(&bind_addr, &addr, Int(sizeOfSockkAddr))
if Darwin.bind(socketFileDescriptor, &bind_addr, socklen_t(sizeOfSockkAddr)) == -1 {
return false
}
if listen(socketFileDescriptor, SOMAXCONN) == -1 {
return false
}
return true
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment