Add a socket callback that can unblock a blocked close
This commit is contained in:
@@ -33,6 +33,13 @@ Socket::~Socket ()
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
}
|
||||
|
||||
void
|
||||
Socket::SetCloseUnblocksCallback (Callback<void,Ptr<Socket> > closeUnblocks)
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
m_closeUnblocks = closeUnblocks;
|
||||
}
|
||||
|
||||
void
|
||||
Socket::SetCloseCallback (Callback<void,Ptr<Socket> > closeCompleted)
|
||||
{
|
||||
@@ -91,6 +98,15 @@ int Socket::Listen (uint32_t queueLimit)
|
||||
return 0; //XXX the base class version does nothing
|
||||
}
|
||||
|
||||
void
|
||||
Socket::NotifyCloseUnblocks (void)
|
||||
{
|
||||
NS_LOG_FUNCTION_NOARGS ();
|
||||
if (!m_closeUnblocks.IsNull ())
|
||||
{
|
||||
m_closeUnblocks (this);
|
||||
}
|
||||
}
|
||||
|
||||
int Socket::Send (const uint8_t* buf, uint32_t size)
|
||||
{
|
||||
|
||||
@@ -78,6 +78,8 @@ public:
|
||||
*/
|
||||
virtual Ptr<Node> GetNode (void) const = 0;
|
||||
|
||||
void SetCloseUnblocksCallback (Callback<void, Ptr<Socket> > closeUnblocks);
|
||||
|
||||
/**
|
||||
* \param closeCompleted Callback invoked when the close operation is
|
||||
* completed.
|
||||
@@ -316,6 +318,7 @@ public:
|
||||
virtual uint32_t GetRcvBuf (void) = 0;
|
||||
|
||||
protected:
|
||||
void NotifyCloseUnblocks (void);
|
||||
void NotifyCloseCompleted (void);
|
||||
void NotifyConnectionSucceeded (void);
|
||||
void NotifyConnectionFailed (void);
|
||||
@@ -327,6 +330,7 @@ protected:
|
||||
void NotifySend (uint32_t spaceAvailable);
|
||||
void NotifyDataRecv (void);
|
||||
|
||||
Callback<void, Ptr<Socket> > m_closeUnblocks;
|
||||
Callback<void,Ptr<Socket> > m_closeCompleted;
|
||||
Callback<void, Ptr<Socket> > m_connectionSucceeded;
|
||||
Callback<void, Ptr<Socket> > m_connectionFailed;
|
||||
|
||||
Reference in New Issue
Block a user