rv = PR_SUCCESS;
SSM_SSLThreadReadFromClient(SSMSSLDataConnection* conn, PRIntn *nSockets,			    PRIntn oBufSize, char *outbound, PRPollDesc *pds){  PRIntn read = 0;  PRIntn sent = 0;  SSMStatus rv = SSM_SUCCESS;  SSM_DEBUG("Attempting to read %ld bytes from client "	    "socket.\n", oBufSize);  read = PR_Recv(SSMDATACONNECTION(conn)->m_clientSocket,		 outbound, oBufSize, 0,		 PR_INTERVAL_NO_TIMEOUT);    if (read <= 0) {    if (read < 0) {      /* Got an error */      rv = SSMSSLDataConnection_UpdateErrorCode(conn);      SSM_DEBUG("Error receiving data over client "		"socket, status == %ld\n", (long)rv);    }    else {      /* We got an EOF */      SSM_DEBUG("Got EOF at client socket.\n");      rv = PR_SUCCESS;    }        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)--;  }  else {    SSM_DEBUG("data: <%s>\n" "Send the data to the "	      "target.\n", outbound);    sent = PR_Send(conn->socketSSL, outbound, read, 0,		   PR_INTERVAL_NO_TIMEOUT);    if (sent != read) {      SSM_DEBUG("Couldn't send all data to the target socket (sent: %d read: %d)\n",		sent, read);      rv = SSMSSLDataConnection_UpdateErrorCode(conn);            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)--;    }  }  return rv;}