SpiecsEngine
 
Loading...
Searching...
No Matches

◆ TEST() [8/59]

SpicesTest::TEST ( EPollPoller_test ,
EPOLLPOLL  )

Testing Spices::Net::EPOLLPOLL.

Definition at line 20 of file EPollPoller_test.h.

20 {
21
23
24 using namespace Spices::Net;
25
26 int r;
27
28 InetAddress addr(8000);
29
30 Socket listen_sock;
31 listen_sock.Create();
32 listen_sock.BindAddress(addr);
33 listen_sock.Listen();
34
35 Socket client_sock;
36 client_sock.Create();
37
38 EPollPoller epoller(EventLoopThreadWrapper::GetInst());
39 HANDLE ephnd = epoller.GetHandle();
40
41 // add listen_sock read event to epoll
42 {
43 epoll_event ev;
44 ev.events = EPOLLIN | EPOLLPRI;
45 ev.data.sock = listen_sock.Fd();
46
47 r = epoll_ctl(ephnd, EPOLL_CTL_ADD, listen_sock.Fd(), &ev);
48 }
49
50 // add listen_sock write event to epoll
51 {
52 epoll_event ev;
53 ev.events = EPOLLOUT;
54 ev.data.sock = client_sock.Fd();
55
56 r = epoll_ctl(ephnd, EPOLL_CTL_ADD, client_sock.Fd(), &ev);
57 }
58
59 client_sock.Connect(&addr);
60
61 // shoule be 2 event.
62 epoll_event evs[8];
63 r = epoll_wait(ephnd, evs, 8, -1);
64
65 InetAddress peerAddress;
66 Socket server_sock(listen_sock.Accept(&peerAddress));
67
68 for (int round = 0; round < 5; round++)
69 {
70 static char buf[1 << 20];
71 epoll_event evs[8];
72 int bytes_received, bytes_sent;
73
74 r = epoll_wait(ephnd, evs, 8, -1);
75
76 memset(buf, round, sizeof(buf));
77
78 bytes_sent = 0;
79 do {
80 client_sock.Send(std::string(buf, sizeof(buf)));
81 bytes_sent += sizeof(buf);
82
83 r = epoll_wait(ephnd, evs, 8, 0);
84 } while (r > 0);
85
86 bytes_received = 0;
87 do {
88 auto s = server_sock.Receive();
89 bytes_received += s.size();
90 } while (bytes_received < bytes_sent);
91 }
92
93 r = epoll_ctl(ephnd, EPOLL_CTL_DEL, client_sock.Fd(), NULL);
94 }
#define SPICESTEST_PROFILE_FUNCTION()
This class is Wrapper of current socket address.
Definition InetAddress.h:22
void Connect(InetAddress *connectAddress) const
Connect to socket.
Definition Socket.cpp:62
void Send(const std::string &data) const
Send data to server.
Definition Socket.cpp:106
SOCKET Accept(InetAddress *peerAddress) const
Accept connection on socket.
Definition Socket.cpp:83
void BindAddress(const InetAddress &localAddress) const
Bind address to socket.
Definition Socket.cpp:36
void Create()
Create Non Blocking Socket.
Definition Socket.cpp:27
const SOCKET Fd() const
Get this socket fd.
Definition Socket.h:60
void Listen() const
Listen on socket.
Definition Socket.cpp:49
This class is Wrapper of socket.
Definition Socket.h:18

References Spices::Net::Socket::BindAddress(), Spices::Net::Socket::Connect(), Spices::Net::Socket::Create(), Spices::Net::EPollPoller::EPollPoller(), Spices::Net::EventLoopThreadWrapper::GetInst(), and Spices::Net::Socket::Listen().