diff options
author | qctecmdr <qctecmdr@localhost> | 2019-07-03 10:26:16 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2019-07-03 10:26:16 -0700 |
commit | 526cdba7787d5cf075c4a90c2bf8e4b3ca1400e6 (patch) | |
tree | 087c03383e82086f2e215fbfac9f627745e8e96b | |
parent | 18d9283e40353e7064f8e190e045e1d4d6bfe587 (diff) | |
parent | 5f21e4fdef66129845322113ab98b33db420ca75 (diff) | |
download | gps-526cdba7787d5cf075c4a90c2bf8e4b3ca1400e6.tar.gz |
Merge "Send abort msg explictly to loopback address"
-rw-r--r-- | utils/LocIpc.cpp | 11 |
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)); } } |