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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
/*
*
* Copyright (c) 2018 Huawei Technologies Co.,Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "lb.h"
int fd = -1;
void *
thread (void *arg)
{
struct epoll_event ev[32];
int id = *(int *) arg;
int ep = _epoll_create (1);
int i, num;
ev[0].events = EPOLLIN | EPOLLET;
ev[0].data.fd = id;
_epoll_ctl (ep, EPOLL_CTL_ADD, fd, &ev[0]);
while (1)
{
num = _epoll_wait (ep, ev, 32, -1);
(void) printf ("thread %d recv events %d\n", id, num);
for (i = 0; i < num; ++i)
{
(void)
printf
("thread %d recv events %d : index: %d id: %d event: 0x%x\n", id,
num, i, ev[i].data.fd, ev[i].events);
}
}
return NULL;
}
int
main (int argc, const char *argv[])
{
struct sockaddr_in addr = { 0 };
int id1 = 1, id2 = 2, id3 = 3;
fd = _socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (fd < 0)
return 1;
addr.sin_family = AF_INET;
addr.sin_port = htons (10000);
_bind (fd, (struct sockaddr *) &addr, sizeof (addr));
_listen (fd, 10);
pthread_t t1 = lb_thread (thread, (void *) &id1, "thread-1");
pthread_t t2 = lb_thread (thread, (void *) &id2, "thread-2");
pthread_t t3 = lb_thread (thread, (void *) &id3, "thread-3");
sleep (1000000);
return 0;
}
|