blob: dafbf3f88c0b9a49988daa365574b7bc379bd822 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#include <lib/base/message.h>
#include <unistd.h>
#include <lib/base/eerror.h>
eMessagePump::eMessagePump(int mt): content(1024*1024), ismt(mt)
{
pipe(fd);
}
eMessagePump::~eMessagePump()
{
if (ismt)
content.lock(); // blocks until all messages are processed.
close(fd[0]);
close(fd[1]);
}
int eMessagePump::send(const void *data, int len)
{
if (ismt)
content.lock(len);
return ::write(fd[1], data, len)<0;
}
int eMessagePump::recv(void *data, int len)
{
unsigned char*dst=(unsigned char*)data;
while (len)
{
if (ismt)
content.unlock(len);
int r=::read(fd[0], dst, len);
if (r<0)
return r;
dst+=r;
len-=r;
}
return 0;
}
int eMessagePump::getInputFD() const
{
return fd[1];
}
int eMessagePump::getOutputFD() const
{
return fd[0];
}
|