summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqctecmdr <qctecmdr@localhost>2019-07-03 10:26:16 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2019-07-03 10:26:16 -0700
commit526cdba7787d5cf075c4a90c2bf8e4b3ca1400e6 (patch)
tree087c03383e82086f2e215fbfac9f627745e8e96b
parent18d9283e40353e7064f8e190e045e1d4d6bfe587 (diff)
parent5f21e4fdef66129845322113ab98b33db420ca75 (diff)
downloadgps-526cdba7787d5cf075c4a90c2bf8e4b3ca1400e6.tar.gz
Merge "Send abort msg explictly to loopback address"
-rw-r--r--utils/LocIpc.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/utils/LocIpc.cpp b/utils/LocIpc.cpp
index e857817..f4dd0b4 100644
--- a/utils/LocIpc.cpp
+++ b/utils/LocIpc.cpp
@@ -193,7 +193,8 @@ public:
mSockType(sockType),
mSock(make_shared<Sock>((nullptr == name) ? -1 : (::socket(AF_INET, mSockType, 0)))),
mName((nullptr == name) ? "" : name),
- mAddr({.sin_family=AF_INET, .sin_port=htons(port), .sin_addr={htonl(INADDR_ANY)}}) {
+ mAddr({.sin_family = AF_INET, .sin_port = htons(port),
+ .sin_addr = {htonl(INADDR_ANY)}}) {
if (mSock != nullptr && mSock->isValid() && nullptr != name) {
struct hostent* hp = gethostbyname(name);
if (nullptr != hp) {
@@ -222,12 +223,14 @@ public:
};
class LocIpcInetRecver : public LocIpcInetSender, public LocIpcRecver {
+ int32_t mPort;
protected:
virtual ssize_t recv() const = 0;
public:
inline LocIpcInetRecver(const shared_ptr<ILocIpcListener>& listener, const char* name,
int32_t port, int sockType) :
- LocIpcInetSender(name, port, sockType), LocIpcRecver(listener, *this) {
+ LocIpcInetSender(name, port, sockType), LocIpcRecver(listener, *this),
+ mPort(port) {
if (mSock->isValid() && ::bind(mSock->mSid, (struct sockaddr*)&mAddr, sizeof(mAddr)) < 0) {
LOC_LOGe("bind socket error. sock fd: %d, reason: %s", mSock->mSid, strerror(errno));
mSock->close();
@@ -237,7 +240,9 @@ public:
inline virtual const char* getName() const override { return mName.data(); };
inline virtual void abort() const override {
if (isSendable()) {
- mSock->sendAbort(0, (struct sockaddr*)&mAddr, sizeof(mAddr));
+ sockaddr_in loopBackAddr = {.sin_family = AF_INET, .sin_port = htons(mPort),
+ .sin_addr = {htonl(INADDR_LOOPBACK)}};
+ mSock->sendAbort(0, (struct sockaddr*)&loopBackAddr, sizeof(loopBackAddr));
}
}