summaryrefslogtreecommitdiff
path: root/Ivy/ThreadedSocket.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Ivy/ThreadedSocket.cxx')
-rw-r--r--Ivy/ThreadedSocket.cxx27
1 files changed, 22 insertions, 5 deletions
diff --git a/Ivy/ThreadedSocket.cxx b/Ivy/ThreadedSocket.cxx
index 03b062e..99caa80 100644
--- a/Ivy/ThreadedSocket.cxx
+++ b/Ivy/ThreadedSocket.cxx
@@ -159,21 +159,32 @@ void CThreadedSocket::Close()
//ASSERT(SOCKET_ERROR != closesocket(m_hSocket));
SOCKET temp = m_hSocket; // Thread ACK
m_hSocket = INVALID_SOCKET;
- TRACE( "CThreadedSocket::Close (reader=0x%0lx) (writer=0x%0lx)\n", reader_id, writer_id );
+ TRACE( "CThreadedSocket::Close (current=0x%0lx) (reader=0x%0lx) (writer=0x%0lx)\n", currentThreadId, reader_id, writer_id );
closesocket(temp); // close silently
//if ( thread ) // On fait de l'auto delete mais dans le cas de terminaison anormale l'object reste ????!!!
// delete thread;
-// TRACE("CThreadedSocket waiting for thread end ...\n");
if ( h_reader && currentThreadId != reader_id )
- WaitForSingleObject( h_reader, 5000 );
+ {
+ TRACE("CThreadedSocket waiting for thread end (reader=0x%0lx)...\n",reader_id);
+ DWORD res = WaitForSingleObject( h_reader, INFINITE );
+ if ( res != WAIT_OBJECT_0 )
+ {
+ TRACE("CThreadedSocket waiting for thread end (reader=0x%0lx) error 0x%0lx lasterror 0x%0lx\n",reader_id,res, ::GetLastError());
+ }
+ }
// wake up writer
if ( h_writer && currentThreadId != writer_id )
{
+ TRACE("CThreadedSocket waiting for thread end (writer=0x%0lx)...\n",writer_id);
err = ReleaseSemaphore(send_count, 1, &PreviousCount);
- WaitForSingleObject( h_writer, 5000 );
+ DWORD res = WaitForSingleObject( h_writer, INFINITE );
+ if ( res != WAIT_OBJECT_0 )
+ {
+ TRACE("CThreadedSocket waiting for thread end (writer=0x%0lx) error 0x%0lx lasterror 0x%0lx\n",writer_id,res, ::GetLastError());
}
-// TRACE("CThreadedSocket all thread ended\n");
+ }
+ TRACE("CThreadedSocket all thread ended (reader=0x%0lx) (writer=0x%0lx)\n", reader_id, writer_id);
}
}
int CThreadedSocket::Listen(int nConnectionBacklog)
@@ -452,6 +463,12 @@ UINT CThreadedSocket::SocketReader( )
FD_SET(m_hSocket, &exceptfds);
err = select( 1, &readfds, &writefds, &exceptfds, NULL );
+ if (m_hSocket == INVALID_SOCKET)
+ {
+ TRACE( "CThreadedSocket::SocketThread no more Socket *********** !thread_id =( 0x%x) \n",reader_id);
+ return -1;
+ }
+
sock_err = this->GetLastError();
switch ( err )