pds->fd = NULL; (*nSockets)--;
pds->in_flags = NULL; PR_Shutdown(conn->socketSSL, PR_SHUTDOWN_RCV); rv = SSM_FAILURE;
SSM_SSLThreadReadFromServer(SSMSSLDataConnection* conn, PRIntn *nSockets,			    char *inbound, PRIntn bufsize,			    PRPollDesc* pds){  PRIntn read = 0;  PRIntn sent = 0;  SSMStatus rv=SSM_SUCCESS;  SSM_DEBUG("Reading data from target socket.\n");  read = PR_Recv(conn->socketSSL, inbound, bufsize,		 0, PR_TicksPerSecond()*120);    if (read <= 0) {    if (read < 0) {      /* Got error */      rv = SSMSSLDataConnection_UpdateErrorCode(conn);      SSM_DEBUG("Error receiving data from target "		"socket, status = %ld\n", rv);    }    else {      /* We got an EOF */      SSM_DEBUG("Got EOF at target socket.\n");      rv = SSM_SUCCESS;    }        if (SSMDATACONNECTION(conn)->m_clientSocket != NULL) {      SSM_DEBUG("Shutting down the client socket.\n");      PR_Shutdown(SSMDATACONNECTION(conn)->m_clientSocket, 		  PR_SHUTDOWN_SEND);    }        /* remove the socket from the array */    pds->fd = NULL;    (*nSockets)--;  }  else {    /* Got data, write it to the client socket */    SSM_DEBUG("Writing to client socket.\n");#if 0    SSM_DumpBuffer(inbound, read);#endif    sent = PR_Send(SSMDATACONNECTION(conn)->m_clientSocket,		   inbound, read, 0, 		   PR_INTERVAL_NO_TIMEOUT);    if (sent != read) {      rv = SSMSSLDataConnection_UpdateErrorCode(conn);            if (conn->socketSSL != NULL) {	SSM_DEBUG("Shutting down the target socket.\n");	PR_Shutdown(conn->socketSSL, PR_SHUTDOWN_SEND);      }            /* remove the socket from the array */      pds->fd = NULL;      (*nSockets)--;    }    SSM_DEBUG("Wrote %ld bytes.\n", sent);  }  return rv;}