Re: proper way to close a socket?
Hi Hector,
Gladly. Below is the code below, with non-related stuff removed. CMySocket
is derived directly from CAsyncSocket. I do not override Create() or
Connect() (or any other CAsyncSocket functions), so they pass straight
through. My derived class just buffers the data from the stream and returns
fully formed strings or packets to the user, depending on the operating mode
selected.
When the button is pressed, the first time, m_pClientSocket is NULL, so a
client socket is new'd, Create()'d and Connect()'d. Next time the button is
pressed, the connection will be broken. Before I just deleted the socket,
but now I have your ShutDown() recommendation included. I didn't loop the
Receive()s because they are giving me a socket not connected error anyway.
Notice I have a check if the socket is connected, because I figure I might
have to handle the two cases separately.
Thanks,
Bill
void CSocketDlg::OnConnectButton()
{
// TODO: Add your control notification handler code here
if(m_pClientSocket)
{
if(m_pClientSocket->IsConnected())
{
}
else
{
}
BOOL ret = m_pClientSocket->ShutDown(2);
int error = m_pClientSocket->GetLastError();
char buf[1000];
int bufsize = sizeof(buf);
ret = ((CAsyncSocket *)m_pClientSocket)->Receive(buf, bufsize, 0);
error = m_pClientSocket->GetLastError();
Sleep(2000);
delete m_pClientSocket; // this will also close the connection
m_pClientSocket = NULL;
}
else
{
CString port;
m_toURLCtrl.GetWindowText(m_toURL);
m_toPortCtrl.GetWindowText(port);
sscanf(port, "%d", &m_toPort);
//UpdateData(TRUE);
BOOL bRet;
m_pClientSocket = new CMySocket;
bRet = m_pClientSocket->Create();
if(!bRet)
{
int error = GetLastError();
}
else
{
m_pClientSocket->SetName("Client Socket");
m_pClientSocket->SetCallbackTarget(this);
m_pClientSocket->SetOnAcceptCallback(OnAcceptCallback);
m_pClientSocket->SetOnConnectCallback(OnConnectCallback);
m_pClientSocket->SetOnCloseCallback(OnCloseCallback);
m_pClientSocket->SetOnReceiveCallback(OnReceiveCallback);
m_pClientSocket->SetOnSendCallback(OnSendCallback);
bRet = m_pClientSocket->Connect(m_toURL, m_toPort);
if(!bRet)
{
int error = GetLastError();
}
m_connectCtrl.SetWindowText("Connecting");
}
}
"Hector Santos" <sant9442@nospam.gmail.com> wrote in message
news:u9lW72jxKHA.1692@TK2MSFTNGP04.phx.gbl...
Bill Brehm wrote:
Hector, did my post show up this time? I see it but no one responded, so
i'm not sure if others can see it.
Before reposting, can you show the code calling the
pAsyncSocket->Connect() function?
--
HLS