Tuesday, October 5, 2021

Digest for comp.programming.threads@googlegroups.com - 2 updates in 2 topics

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: