- Sum server, mutch improved [Swift] - 1 Update
- More philosophy about the english language.. - 1 Update
| Branimir Maksimovic <branimir.maksimovic@icloud.com>: Oct 05 02:17AM On 2021-10-04, Branimir Maksimovic <branimir.maksimovic@icloud.com> wrote: import Foundation signal(SIGPIPE,SIG_IGN) let s = Server(); s.start() var ende:Bool? = nil var semacnt:Int? = nil var mutex:Bool? = nil var accarrFD:[Int32]? = nil class Server { init() { if (CommandLine.argc > 1) { tmpSvcPort = Int(CommandLine.arguments[1]) ?? 0 if (tmpSvcPort > 0){ servicePort = String(tmpSvcPort) } } semacnt! = 0 mutex! = false ende! = false accarrFD! = Array(repeating:Int32(0),count:0) } var tmpSvcPort: Int = 0 var servicePort = "1234" class Worker:Thread{ init(_ fd:Int32){ self.fd = fd semacnt! += 1 } deinit { semacnt! -= 1 } override func main(){ let MTU = 65536 let buffer = UnsafeMutablePointer<CChar>.allocate(capacity:MTU) defer { buffer.deallocate() } while (mutex! == true){usleep(100)} mutex! = true print("acquired") var oneFD = Array(repeating:Int32(0),count:0) while (!accarrFD!.isEmpty){ /// collect rest of fds oneFD.append(accarrFD![accarrFD!.count-1]) accarrFD!.remove(at:accarrFD!.count-1) } mutex! = false /// seems we do not need barrier print("releazed\n") var toproc = [fd] toproc += oneFD for fd in toproc{ defer {close(fd)} let readResult = read(fd, buffer, MTU) if (readResult == 0) { break; // end of file } else if (readResult == -1) { print("Error reading form client(\(fd)) - \(errno)") break; // error } else { let strResult = String(cString: buffer) let cset = CharacterSet(charactersIn: " \r\n") let numbers = strResult.components(separatedBy: cset) var sum = 0 if numbers.count > 1 { if numbers[0].lowercased() == "quit" { ende! = true continue } else { let num1 = Int(numbers[0]) ?? 0 let num2 = Int(numbers[1]) ?? 0 sum = num1 + num2 } } print("Received form client(\(fd)): \(strResult)") let out = String(format:"suma %d\n",sum) let _ = out.withCString { /**let flags = fcntl(fd,F_GETFL) let _ = fcntl(fd,F_SETFL,flags | O_NONBLOCK) */ while(semacnt! > 128){usleep(100)} write(fd, $0, out.count) } } } } var fd: Int32 } func start() { print("Server starting...") let socketFD = socket(AF_INET6, //Domain [AF_INET,AF_INET6, AF_UNIX] SOCK_STREAM, //Type [SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET, SOCK_RAW] IPPROTO_TCP //Protocol [IPPROTO_TCP, IPPROTO_SCTP, IPPROTO_UDP, IPPROTO_DCCP] )//Return a FileDescriptor -1 = error if socketFD == -1 { print("Error creating BSD Socket") return } var hints = addrinfo( ai_flags: AI_PASSIVE, // Assign the address of the local host to the socket structures ai_family: AF_UNSPEC, // Either IPv4 or IPv6 ai_socktype: SOCK_STREAM, // TCP ai_protocol: 0, ai_addrlen: 0, ai_canonname: nil, ai_addr: nil, ai_next: nil) var servinfo: UnsafeMutablePointer<addrinfo>? = nil let addrInfoResult = getaddrinfo( nil, // Any interface servicePort, // The port on which will be listenend &hints, // Protocol configuration as per above &servinfo) if addrInfoResult != 0 { print("Error getting address info: \(errno)") return } setsockopt(socketFD,SOL_SOCKET,SO_REUSEADDR,servinfo!.pointee.ai_addr, socklen_t(servinfo!.pointee.ai_addrlen)) let bindResult = bind(socketFD, servinfo!.pointee.ai_addr, socklen_t(servinfo!.pointee.ai_addrlen)) if bindResult == -1 { print("Error binding socket to Address: \(errno)") return } let listenResult = listen(socketFD, //Socket File descriptor 128 // The backlog argument defines the maximum length the queue of pending connections may grow to ) /** let flags = fcntl(socketFD,F_GETFL) let _ = fcntl(socketFD,F_SETFL,flags | O_NONBLOCK) */ if listenResult == -1 { print("Error setting our socket to listen") return } while (!ende!) { var addr = sockaddr() var addr_len :socklen_t = 0 while (!ende!) { print("About to accept") let accFD = accept(socketFD, &addr, &addr_len) if (accFD > 0){ print("Accepted new client with file descriptor: \(accFD)") if (semacnt! < 5) { let handle = Worker(accFD); handle.start() } else { while (mutex! == true){usleep(100)} mutex! = true /// works fine without barrier accarrFD!.append(accFD) mutex! = false } } else { print("Error accepting connection") usleep(100) } OSMemoryBarrier() /// barrier needed here } } } } -- 7-77-777 Evil Sinner! to weak you should be meek, and you should brainfuck stronger https://github.com/rofl0r/chaos-pp |
| Amine Moulay Ramdane <aminer68@gmail.com>: Oct 04 12:57PM -0700 Hello, More philosophy about the english language.. Of the approximately 1.5 billion people who speak English, less than 400 million use it as a first language. That means over 1 billion speak it as a secondary language. Read more here: https://www.weforum.org/agenda/2019/11/countries-that-speak-english-as-a-second-language/ Thank you, Amine Moulay Ramdane. |
| You received this digest because you're subscribed to updates for this group. You can change your settings on the group membership page. To unsubscribe from this group and stop receiving emails from it send an email to comp.programming.threads+unsubscribe@googlegroups.com. |
No comments:
Post a Comment