Re[2]: Как правильно закрыть сокет.
От: Ahven  
Дата: 05.05.04 15:36
Оценка:
Здравствуйте, merlinJap, Вы писали:

J>void CTcpSender::TcpCloseConnections()

J>{
J> if(m_WorkSocketStatus == sockNewNotCreated)
J> {
J> delete m_cWorkSocket;
J> m_WorkSocketStatus = sockNotNew;
J> }
J> else if(m_WorkSocketStatus == sockCreated)
J> {
J> if (m_cWorkSocket->IsBlocking())
J> {
J> m_cWorkSocket->CancelBlockingCall();
J> }
J> m_cWorkSocket->Close();
J> delete m_cWorkSocket;
J> m_WorkSocketStatus = sockNotNew;
J> }
J>}

Спасибо.
По данному коду есть несколько вопросов:

Во-первых, m_cWorkSocket — какого класса? Стандартный какой-то или Вы сами писали? И, собственно, где закрывается поток, в котором обрабатываются recv и send для данного сокета? Видимо, здесь: m_cWorkSocket->Close()? А как он закрывается?

Во-вторых, там внутри CancelBlockingCall(), часом, нет вызова WSACancelBlockingCall()? А то согласно MSDN последняя функция является устаревшей и нерекомендована к использованию.

Кстати, а как Вы закрывали напрямую из другого потока?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.