Merge "Send abort msg explictly to loopback address"
This commit is contained in:
commit
526cdba778
1 changed files with 8 additions and 3 deletions
|
@ -193,7 +193,8 @@ public:
|
||||||
mSockType(sockType),
|
mSockType(sockType),
|
||||||
mSock(make_shared<Sock>((nullptr == name) ? -1 : (::socket(AF_INET, mSockType, 0)))),
|
mSock(make_shared<Sock>((nullptr == name) ? -1 : (::socket(AF_INET, mSockType, 0)))),
|
||||||
mName((nullptr == name) ? "" : name),
|
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) {
|
if (mSock != nullptr && mSock->isValid() && nullptr != name) {
|
||||||
struct hostent* hp = gethostbyname(name);
|
struct hostent* hp = gethostbyname(name);
|
||||||
if (nullptr != hp) {
|
if (nullptr != hp) {
|
||||||
|
@ -222,12 +223,14 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
class LocIpcInetRecver : public LocIpcInetSender, public LocIpcRecver {
|
class LocIpcInetRecver : public LocIpcInetSender, public LocIpcRecver {
|
||||||
|
int32_t mPort;
|
||||||
protected:
|
protected:
|
||||||
virtual ssize_t recv() const = 0;
|
virtual ssize_t recv() const = 0;
|
||||||
public:
|
public:
|
||||||
inline LocIpcInetRecver(const shared_ptr<ILocIpcListener>& listener, const char* name,
|
inline LocIpcInetRecver(const shared_ptr<ILocIpcListener>& listener, const char* name,
|
||||||
int32_t port, int sockType) :
|
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) {
|
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));
|
LOC_LOGe("bind socket error. sock fd: %d, reason: %s", mSock->mSid, strerror(errno));
|
||||||
mSock->close();
|
mSock->close();
|
||||||
|
@ -237,7 +240,9 @@ public:
|
||||||
inline virtual const char* getName() const override { return mName.data(); };
|
inline virtual const char* getName() const override { return mName.data(); };
|
||||||
inline virtual void abort() const override {
|
inline virtual void abort() const override {
|
||||||
if (isSendable()) {
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue