Skip to content

Commit 4b1a5ed

Browse files
authored
Merge pull request #29 from an-tao/dev
Modify the code style
2 parents 2d976d3 + b8be70b commit 4b1a5ed

File tree

7 files changed

+170
-143
lines changed

7 files changed

+170
-143
lines changed

trantor/net/inner/Socket.cc

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,33 @@
2020
#include <netinet/tcp.h>
2121

2222
using namespace trantor;
23+
24+
bool Socket::isSelfConnect(int sockfd)
25+
{
26+
struct sockaddr_in6 localaddr = getLocalAddr(sockfd);
27+
struct sockaddr_in6 peeraddr = getPeerAddr(sockfd);
28+
if (localaddr.sin6_family == AF_INET)
29+
{
30+
const struct sockaddr_in *laddr4 =
31+
reinterpret_cast<struct sockaddr_in *>(&localaddr);
32+
const struct sockaddr_in *raddr4 =
33+
reinterpret_cast<struct sockaddr_in *>(&peeraddr);
34+
return laddr4->sin_port == raddr4->sin_port &&
35+
laddr4->sin_addr.s_addr == raddr4->sin_addr.s_addr;
36+
}
37+
else if (localaddr.sin6_family == AF_INET6)
38+
{
39+
return localaddr.sin6_port == peeraddr.sin6_port &&
40+
memcmp(&localaddr.sin6_addr,
41+
&peeraddr.sin6_addr,
42+
sizeof localaddr.sin6_addr) == 0;
43+
}
44+
else
45+
{
46+
return false;
47+
}
48+
}
49+
2350
void Socket::bindAddress(const InetAddress &localaddr)
2451
{
2552
assert(sockFd_ > 0);
@@ -175,3 +202,10 @@ int Socket::getSocketError()
175202
return optval;
176203
}
177204
}
205+
206+
Socket::~Socket()
207+
{
208+
LOG_TRACE << "Socket deconstructed:" << sockFd_;
209+
if (sockFd_ >= 0)
210+
close(sockFd_);
211+
}

trantor/net/inner/Socket.h

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -73,41 +73,12 @@ class Socket : NonCopyable
7373
sizeof(struct sockaddr_in)));
7474
}
7575

76-
static bool isSelfConnect(int sockfd)
77-
{
78-
struct sockaddr_in6 localaddr = getLocalAddr(sockfd);
79-
struct sockaddr_in6 peeraddr = getPeerAddr(sockfd);
80-
if (localaddr.sin6_family == AF_INET)
81-
{
82-
const struct sockaddr_in *laddr4 =
83-
reinterpret_cast<struct sockaddr_in *>(&localaddr);
84-
const struct sockaddr_in *raddr4 =
85-
reinterpret_cast<struct sockaddr_in *>(&peeraddr);
86-
return laddr4->sin_port == raddr4->sin_port &&
87-
laddr4->sin_addr.s_addr == raddr4->sin_addr.s_addr;
88-
}
89-
else if (localaddr.sin6_family == AF_INET6)
90-
{
91-
return localaddr.sin6_port == peeraddr.sin6_port &&
92-
memcmp(&localaddr.sin6_addr,
93-
&peeraddr.sin6_addr,
94-
sizeof localaddr.sin6_addr) == 0;
95-
}
96-
else
97-
{
98-
return false;
99-
}
100-
}
76+
static bool isSelfConnect(int sockfd);
10177

10278
explicit Socket(int sockfd) : sockFd_(sockfd)
10379
{
10480
}
105-
~Socket()
106-
{
107-
LOG_TRACE << "Socket deconstructed:" << sockFd_;
108-
if (sockFd_ >= 0)
109-
close(sockFd_);
110-
}
81+
~Socket();
11182
/// abort if address in use
11283
void bindAddress(const InetAddress &localaddr);
11384
/// abort if address in use

trantor/net/inner/TcpConnectionImpl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ class TcpConnectionImpl : public TcpConnection,
3939
class KickoffEntry
4040
{
4141
public:
42-
KickoffEntry(const std::weak_ptr<TcpConnection> &conn) : _conn(conn)
42+
explicit KickoffEntry(const std::weak_ptr<TcpConnection> &conn)
43+
: _conn(conn)
4344
{
4445
}
4546
void reset()

trantor/net/inner/TimerQueue.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class Channel;
3030
typedef std::shared_ptr<Timer> TimerPtr;
3131
struct comp
3232
{
33-
bool operator()(const TimerPtr &x, const TimerPtr &y)
33+
bool operator()(const TimerPtr &x, const TimerPtr &y) const
3434
{
3535
return *x > *y;
3636
}

trantor/tests/LoggerTest.cc

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ int main()
3939
"usr\n"
4040
"var\n"
4141
"vm\n"
42-
"用户信息\n"
4342
"\n"
4443
"/Applications:\n"
4544
"Adobe\n"
@@ -91,8 +90,6 @@ int main()
9190
"Notes.app\n"
9291
"Numbers.app\n"
9392
"OmniGraffle.app\n"
94-
"PPTV网络电视.app\n"
95-
"PP助手.app\n"
9693
"Pages.app\n"
9794
"Photo Booth.app\n"
9895
"Photos.app\n"
@@ -140,8 +137,6 @@ int main()
140137
"pgAdmin 4.app\n"
141138
"vSSH Lite.app\n"
142139
"wechatwebdevtools.app\n"
143-
"搜狐影音.appdownload\n"
144-
"网易有道词典.app\n"
145140
"\n"
146141
"/Applications/Adobe:\n"
147142
"Flash Player\n"
@@ -170,7 +165,6 @@ int main()
170165
"Locales\n"
171166
"Plug-ins\n"
172167
"Presets\n"
173-
"卸载 Adobe Photoshop CC\n"
174168
"\n"
175169
"/Applications/Adobe Photoshop CC/Adobe Photoshop CC.app:\n"
176170
"Contents\n"

trantor/utils/TimingWheel.cc

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
/**
2+
*
3+
* TimingWheel.cc
4+
* An Tao
5+
*
6+
* Public header file in trantor lib.
7+
*
8+
* Copyright 2018, An Tao. All rights reserved.
9+
* Use of this source code is governed by a BSD-style license
10+
* that can be found in the License file.
11+
*
12+
*
13+
*/
14+
15+
#include <trantor/utils/TimingWheel.h>
16+
17+
using namespace trantor;
18+
19+
TimingWheel::TimingWheel(trantor::EventLoop *loop,
20+
size_t maxTimeout,
21+
float tickInterval,
22+
size_t bucketsNumPerWheel)
23+
: _loop(loop),
24+
_tickInterval(tickInterval),
25+
_bucketsNumPerWheel(bucketsNumPerWheel)
26+
{
27+
assert(maxTimeout > 1);
28+
assert(tickInterval > 0);
29+
size_t maxTickNum = maxTimeout / tickInterval;
30+
_wheelsNum = 1;
31+
while (maxTickNum > _bucketsNumPerWheel)
32+
{
33+
_wheelsNum++;
34+
maxTickNum = maxTickNum / _bucketsNumPerWheel;
35+
}
36+
_wheels.resize(_wheelsNum);
37+
for (size_t i = 0; i < _wheelsNum; i++)
38+
{
39+
_wheels[i].resize(_bucketsNumPerWheel);
40+
}
41+
_timerId = _loop->runEvery(_tickInterval, [=]() {
42+
_ticksCounter++;
43+
size_t t = _ticksCounter;
44+
size_t pow = 1;
45+
for (size_t i = 0; i < _wheelsNum; i++)
46+
{
47+
if ((t % pow) == 0)
48+
{
49+
EntryBucket tmp;
50+
{
51+
// use tmp val to make this critical area as short as
52+
// possible.
53+
_wheels[i].front().swap(tmp);
54+
_wheels[i].pop_front();
55+
_wheels[i].push_back(EntryBucket());
56+
}
57+
}
58+
pow = pow * _bucketsNumPerWheel;
59+
}
60+
});
61+
}
62+
63+
TimingWheel::~TimingWheel()
64+
{
65+
_loop->invalidateTimer(_timerId);
66+
67+
for (int i = _wheels.size() - 1; i >= 0; i--)
68+
{
69+
_wheels[i].clear();
70+
}
71+
72+
LOG_TRACE << "TimingWheel destruct!";
73+
}
74+
75+
void TimingWheel::insertEntry(size_t delay, EntryPtr entryPtr)
76+
{
77+
if (delay <= 0)
78+
return;
79+
if (!entryPtr)
80+
return;
81+
if (_loop->isInLoopThread())
82+
{
83+
insertEntryInloop(delay, entryPtr);
84+
}
85+
else
86+
{
87+
_loop->runInLoop([=]() { insertEntryInloop(delay, entryPtr); });
88+
}
89+
}
90+
91+
void TimingWheel::insertEntryInloop(size_t delay, EntryPtr entryPtr)
92+
{
93+
// protected by bucketMutex;
94+
_loop->assertInLoopThread();
95+
96+
delay = delay / _tickInterval + 1;
97+
size_t t = _ticksCounter;
98+
for (size_t i = 0; i < _wheelsNum; i++)
99+
{
100+
if (delay <= _bucketsNumPerWheel)
101+
{
102+
_wheels[i][delay - 1].insert(entryPtr);
103+
break;
104+
}
105+
if (i < (_wheelsNum - 1))
106+
{
107+
entryPtr = std::make_shared<CallbackEntry>([=]() {
108+
if (delay > 0)
109+
{
110+
_wheels[i][(delay + (t % _bucketsNumPerWheel) - 1) %
111+
_bucketsNumPerWheel]
112+
.insert(entryPtr);
113+
}
114+
});
115+
}
116+
else
117+
{
118+
// delay is too long to put entry at valid position in wheels;
119+
_wheels[i][_bucketsNumPerWheel - 1].insert(entryPtr);
120+
}
121+
delay = (delay + (t % _bucketsNumPerWheel) - 1) / _bucketsNumPerWheel;
122+
t = t / _bucketsNumPerWheel;
123+
}
124+
}

trantor/utils/TimingWheel.h

Lines changed: 7 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -68,121 +68,24 @@ class TimingWheel
6868
/// buckets number per wheel
6969
/// The max delay of the CacheMap is about
7070
/// tickInterval*(bucketsNumPerWheel^wheelsNum) seconds.
71-
7271
TimingWheel(trantor::EventLoop *loop,
7372
size_t maxTimeout,
7473
float tickInterval = TIMING_TICK_INTERVAL,
75-
size_t bucketsNumPerWheel = TIMING_BUCKET_NUM_PER_WHEEL)
76-
: _loop(loop),
77-
_tickInterval(tickInterval),
78-
_bucketsNumPerWheel(bucketsNumPerWheel)
79-
{
80-
assert(maxTimeout > 1);
81-
assert(tickInterval > 0);
82-
size_t maxTickNum = maxTimeout / tickInterval;
83-
_wheelsNum = 1;
84-
while (maxTickNum > _bucketsNumPerWheel)
85-
{
86-
_wheelsNum++;
87-
maxTickNum = maxTickNum / _bucketsNumPerWheel;
88-
}
89-
_wheels.resize(_wheelsNum);
90-
for (size_t i = 0; i < _wheelsNum; i++)
91-
{
92-
_wheels[i].resize(_bucketsNumPerWheel);
93-
}
94-
_timerId = _loop->runEvery(_tickInterval, [=]() {
95-
_ticksCounter++;
96-
size_t t = _ticksCounter;
97-
size_t pow = 1;
98-
for (size_t i = 0; i < _wheelsNum; i++)
99-
{
100-
if ((t % pow) == 0)
101-
{
102-
EntryBucket tmp;
103-
{
104-
// use tmp val to make this critical area as short as
105-
// possible.
106-
_wheels[i].front().swap(tmp);
107-
_wheels[i].pop_front();
108-
_wheels[i].push_back(EntryBucket());
109-
}
110-
}
111-
pow = pow * _bucketsNumPerWheel;
112-
}
113-
});
114-
};
115-
~TimingWheel()
116-
{
117-
_loop->invalidateTimer(_timerId);
74+
size_t bucketsNumPerWheel = TIMING_BUCKET_NUM_PER_WHEEL);
11875

119-
for (int i = _wheels.size() - 1; i >= 0; i--)
120-
{
121-
_wheels[i].clear();
122-
}
76+
// If timeout>0, the value will be erased within the 'timeout' seconds after
77+
// the last access
78+
void insertEntry(size_t delay, EntryPtr entryPtr);
12379

124-
LOG_TRACE << "TimingWheel destruct!";
125-
}
126-
127-
// If timeout>0,the value will be erased
128-
// within the 'timeout' seconds after the last access
129-
void insertEntry(size_t delay, EntryPtr entryPtr)
130-
{
131-
if (delay <= 0)
132-
return;
133-
if (!entryPtr)
134-
return;
135-
if (_loop->isInLoopThread())
136-
{
137-
insertEntryInloop(delay, entryPtr);
138-
}
139-
else
140-
{
141-
_loop->runInLoop([=]() { insertEntryInloop(delay, entryPtr); });
142-
}
143-
}
144-
145-
void insertEntryInloop(size_t delay, EntryPtr entryPtr)
146-
{
147-
// protected by bucketMutex;
148-
_loop->assertInLoopThread();
149-
150-
delay = delay / _tickInterval + 1;
151-
size_t t = _ticksCounter;
152-
for (size_t i = 0; i < _wheelsNum; i++)
153-
{
154-
if (delay <= _bucketsNumPerWheel)
155-
{
156-
_wheels[i][delay - 1].insert(entryPtr);
157-
break;
158-
}
159-
if (i < (_wheelsNum - 1))
160-
{
161-
entryPtr = std::make_shared<CallbackEntry>([=]() {
162-
if (delay > 0)
163-
{
164-
_wheels[i][(delay + (t % _bucketsNumPerWheel) - 1) %
165-
_bucketsNumPerWheel]
166-
.insert(entryPtr);
167-
}
168-
});
169-
}
170-
else
171-
{
172-
// delay is too long to put entry at valid position in wheels;
173-
_wheels[i][_bucketsNumPerWheel - 1].insert(entryPtr);
174-
}
175-
delay =
176-
(delay + (t % _bucketsNumPerWheel) - 1) / _bucketsNumPerWheel;
177-
t = t / _bucketsNumPerWheel;
178-
}
179-
}
80+
void insertEntryInloop(size_t delay, EntryPtr entryPtr);
18081

18182
EventLoop *getLoop()
18283
{
18384
return _loop;
18485
}
18586

87+
~TimingWheel();
88+
18689
private:
18790
std::vector<BucketQueue> _wheels;
18891

0 commit comments

Comments
 (0)