File tree 1 file changed +12
-4
lines changed
1 file changed +12
-4
lines changed Original file line number Diff line number Diff line change 5
5
#include < sys/socket.h>
6
6
#include < unistd.h>
7
7
8
+ #include < csignal>
8
9
#include < cstdarg>
9
10
#include < cstdio>
10
11
#include < cstdlib>
@@ -85,8 +86,7 @@ int Sink::write(const char *fmt, ...) const {
85
86
return written;
86
87
}
87
88
88
- Duplex::Duplex (FILE *inStream, FILE *outStream)
89
- : Sink(outStream) {
89
+ Duplex::Duplex (FILE *inStream, FILE *outStream) : Sink(outStream) {
90
90
this ->inDescriptor = fileno (inStream);
91
91
}
92
92
@@ -146,7 +146,15 @@ ssize_t WebSocket::read(void *out, size_t size) {
146
146
return ::read (this ->socket , out, size);
147
147
}
148
148
149
+ void sendAlarm () {
150
+ struct sigaction sact {};
151
+ sigemptyset (&sact.sa_mask );
152
+ sact.sa_flags = 0 ;
153
+ sigaction (SIGALRM, &sact, nullptr );
154
+ alarm (0 );
155
+ }
156
+
149
157
void WebSocket::close () {
150
- // TODO stop listenForIncomingConnection
151
- shutdown (this ->fileDescriptor , SHUT_RDWR);
158
+ sendAlarm (); // stop possible blocking accept call
159
+ shutdown (this ->fileDescriptor , SHUT_RDWR); // shutdown connection
152
160
}
You can’t perform that action at this time.
0 commit comments