8 |
|
|
9 |
|
void Daemon::serve(int port, bool fork, Daemon* self) |
10 |
|
{ |
11 |
< |
// bind |
11 |
> |
api::TcpSocket server; |
12 |
> |
|
13 |
> |
server.Create(); |
14 |
> |
server.SetAddress(api::InternetAddress(api::InternetAddress::Any, port)); |
15 |
|
|
16 |
|
if (fork) |
17 |
|
{ |
28 |
|
} |
29 |
|
} |
30 |
|
|
31 |
< |
// listen |
31 |
> |
server.Listen(50); |
32 |
|
|
33 |
|
while (true) |
34 |
|
{ |
35 |
< |
// accept |
35 |
> |
api::TcpSocket* client(new api::TcpSocket()); |
36 |
> |
|
37 |
> |
server.Accept(*client); |
38 |
|
|
39 |
< |
self->handle(); // thread |
39 |
> |
api::Thread thread(etl::BindAll(&Daemon::handle, self, client)); |
40 |
|
} |
41 |
|
} |
42 |
|
|
43 |
< |
int Daemon::handle() |
43 |
> |
int Daemon::handle(api::TcpSocket* client) |
44 |
|
{ |
45 |
+ |
ios::InputOutputStreamBufAdapter adapter(*client); |
46 |
+ |
iostream socket(&adapter); |
47 |
+ |
|
48 |
|
// |
49 |
+ |
|
50 |
+ |
delete client; |
51 |
|
} |