I am trying to set SO_RCVTIMEO for read timeout, but __pthread_read() is not
timing out.  Do you know anything about this?
 
Here is my code below:
 
Helen
 
===============================================
int connectServer (char *szIPAddr, int nPort)
{
   
int     nError;
   int     cnt;
   struct sockaddr_in saClient;
   struct sockaddr_in saServer;
   struct timeval timeout;
 
   memset(&saClient, 0, sizeof(SOCKADDR));
   memset(&saServer, 0, sizeof(SOCKADDR));
 
   saClient.sin_family = AF_INET;
   gClientSocket = socket(saClient.sin_family , SOCK_STREAM, PF_UNSPEC);
   if(gClientSocket == INVALID_SOCKET)
   {
      gClientSocket = 0;
      return ERROR;
   }
 
   /* bind to socket */
   nError = bind(gClientSocket, (const struct sockaddr *)&saClient, sizeof(saClient));
   if(nError != 0)
   {
      close(gClientSocket);
      gClientSocket = 0;
      return ERROR;
   }
 
   saServer.sin_family = AF_INET;
   ((struct sockaddr_in *)&saServer)->sin_port = htons((USHORT)nPort);
   ((struct sockaddr_in *)&saServer)->sin_addr.s_addr = inet_addr(szIPAddr);
 
   /* Connect to socket server.*/
   nError = __pthread_connect(gClientSocket, (struct sockaddr *)&saServer, sizeof(saServer));
   if(nError != 0)
   {
      close(gClientSocket);
      gClientSocket = 0;
      return ERROR;
   }

   timeout.tv_usec = 0;
   timeout.tv_sec = 5;
   if((setsockopt(gClientSocket, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout,
                                                 sizeof(timeout)))) {
      close(gClientSocket);
      gClientSocket = 0;
      return ERROR;
   }
  
.....
 
   cnt = __pthread_read(gClientSocket, pResponse, MAX_MSG_SIZE);
....
 
   return OK;
}
 

Reply via email to