0
我想编写一个简单的服务器套接字。连接到客户端是成功的。但在断开连接并尝试重新建立服务器套接字后,在绑定过程中出现错误(errno = 48,EADDRINUSE)。谁知道怎么修它?Swift - 服务器套接字无法重新绑定
func initServerSocket(serverSocket: Int32) -> Int32 {
var clientSocket: Int32 = -1
var server_addr_size: Int
var client_addr_size = socklen_t(MemoryLayout<sockaddr_in>.size)
var server_addr = sockaddr_in()
var client_addr = sockaddr_in()
server_addr_size = MemoryLayout<sockaddr_in>.size
memset(&server_addr, 0, server_addr_size);
server_addr.sin_family = sa_family_t(AF_INET)
server_addr.sin_port = UInt16(8080).bigEndian
server_addr.sin_addr.s_addr = UInt32(0x00000000)
let bind_server = withUnsafePointer(to: &server_addr) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
bind(serverSocket, $0, socklen_t(MemoryLayout<sockaddr_in>.stride))
}
}
if bind_server == -1 {
print("[Fail] Bind Port, Error: \(errno)");
exit(1);
} else {
print("[Success] Binded Port \(bind_server)");
}
if listen(serverSocket, 5) == -1 {
print("[Fail] Listen");
exit(1);
} else {
print("[Success] Listening : \(server_addr.sin_port) Port ...");
}
clientSocket = withUnsafeMutablePointer(to: &client_addr) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
accept(serverSocket, $0, &client_addr_size)
}
}
if clientSocket == -1 {
print("[Fail] Accept Client Connection \(errno)");
exit(1);
} else {
print("[Success] Accepted Client : \(inet_ntoa(client_addr.sin_addr)!) : \(client_addr.sin_port)!");
}
return clientSocket
}
断开功能:
func disconnect() {
if clientSocket != -1 {
self.inputStream.close()
self.outputStream.close()
if close(HiveConfig.clientSocket) == -1 {
print("serverSocket close error")
}
if close(HiveConfig.serverSocket) == -1 {
print("serverSocket close error")
}
}
}