summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorBhavna Sharma <sbhavna@codeaurora.org>2019-05-30 16:33:04 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2019-06-26 15:23:13 -0700
commit5f21e4fdef66129845322113ab98b33db420ca75 (patch)
tree52dc413c411e896491bb8237927008ae08b91f76 /utils
parent8d4a16cef0da4ea344a844e041c2f8c96c714f67 (diff)
downloadgps-5f21e4fdef66129845322113ab98b33db420ca75.tar.gz
Send abort msg explictly to loopback address
To abort inet receiver thread, an abort message must be sent explictly to loopback address. For reciever to receive abort message it must be open to receive messages on INADDR_ANY and not just specific IP address. CRs-Fixed: 2462833 Change-Id: I9ab3266d582bc774655fcabfc086dab33010f7d8
Diffstat (limited to 'utils')
-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));
}
}