Home » U++ Library support » U++ MT-multithreading and servers » How to break the server loop ?
|
Re: How to break the server loop ? [message #44655 is a reply to message #44654] |
Wed, 06 May 2015 20:15   |
|
Hi akabee
akebee wrote on Wed, 06 May 2015 14:25 for(;;) {
TcpSocket s;
if(s.Accept(server)) {
}
In the server loop, the s.Accept will blocked the thread, So how to exit thread when program-quit ?
On POSIX systems, the easiest way is probably using signals. You can terminate your program by calling kill(pid, signal). Everything your server is doing, including Accept will be interupted. If you need to perform clean-up tasks etc. on shutdown, you can install signal-handler function, that will be called. To register the handler, signal(sig, function) is used.
You can look at Skylark package, how it is done there. The kill function is called here, The signal handler is installed just a few lines below.
Alternatively, you can use non-blocking Accept(), if I am not mistaken, it should be enough to just call TcpSocket::Timeout(0). I never used it personally, so you should probably check the documentation first, there are some additional hints 
Best regards,
Honza
|
|
|
|
Re: How to break the server loop ? [message #44658 is a reply to message #44657] |
Thu, 07 May 2015 08:36   |
|
akebee wrote on Thu, 07 May 2015 08:05Hi dolik.rce
Im not in POSIX , its Windows.
Now i send a request to my server socket when program-quit, if recieved the specific request the server thread will break and exit.
Is this a good solution ?
It's 'possible' solution Depends on your actual needs. The biggest problem with this solution is, that anyone can remotelly shut down your server, so it is definitelly good for public projects (unless there is reliable authetication & authorization). But for small projects it might be ok, I've used it in past too 
If you wan't something better I'd suggest you to try reading about the timeouts in TcpSocket. If you set timeout to reasonably small value (or 0, to make it nonblocking, as I suggest previously), shutting the server down should take just slightly longer than the timeout value. This should work well on any platform, including windows.
Honza
|
|
|
|
|
|
|
Goto Forum:
Current Time: Fri May 09 20:24:31 CEST 2025
Total time taken to generate the page: 0.02169 seconds
|