rem: {
context: frecv(struct soap *soap, char *s, size_t n){ register int r;  soap->errnum = 0;#if defined(__cplusplus) && !defined(UNDER_CE)  if (soap->is)  { if (soap->is->good())      return soap->is->read(s, n).gcount();    return 0;  }#endif  if (soap_valid_socket(soap->socket))  { for (;;)    {#ifndef WITH_LEAN      struct timeval timeout;      fd_set fd;      if (soap->recv_timeout)      { if (soap->recv_timeout > 0)        { timeout.tv_sec = soap->recv_timeout;          timeout.tv_usec = 0;        }        else        { timeout.tv_sec = -soap->recv_timeout/1000000;          timeout.tv_usec = -soap->recv_timeout%1000000;        }        FD_ZERO(&fd);        FD_SET((SOAP_SOCKET)soap->socket, &fd);        for (;;)        { r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);          if (r > 0)            break;          if (r == 0)            return 0;          if (soap_socket_errno != SOAP_EINTR)          { soap->errnum = soap_socket_errno;            return 0;          }        }      }#endif#ifdef WITH_OPENSSL      if (soap->ssl)      { int err;	r = SSL_read(soap->ssl, s, n);        if ((err = SSL_get_error(soap->ssl, r)) == SSL_ERROR_NONE)          return (size_t)r;	if (err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)          return 0;      }      else#endif      { r = recv((SOAP_SOCKET)soap->socket, s, n, soap->socket_flags);        if (r >= 0)          return (size_t)r;        if (soap_socket_errno != SOAP_EINTR && soap_socket_errno != SOAP_EAGAIN)        { soap->errnum = soap_socket_errno;          return 0;        }      }#ifndef WITH_LEAN      { struct timeval timeout;        fd_set fd;        timeout.tv_sec = 0;        timeout.tv_usec = 10000;        FD_ZERO(&fd);        FD_SET((SOAP_SOCKET)soap->socket, &fd);        r = select((SOAP_SOCKET)(soap->socket + 1), &fd, NULL, &fd, &timeout);        if (r < 0 && soap_socket_errno != SOAP_EINTR)        { soap->errnum = soap_socket_errno;          return 0;        }      }#endif    }  }#ifdef WITH_FASTCGI  return fread(s, 1, n, stdin);#else#ifdef UNDER_CE  return fread(s, 1, n, soap->recvfd);#else/* WR[ */#ifdef WMW_RPM_IO  if (soap->rpmreqid)      {      r = httpBlockRead(soap->rpmreqid, s, n);      }  else      {      r = read(soap->recvfd, s, n);      }  if (r >= 0)  {    return r;  }  return 0;#else/* ]WR */  r = read((SOAP_SOCKET)soap->recvfd, s, n);  if (r >= 0)    return (size_t)r;  soap->errnum = soap_errno;  return 0;/* WR[ */#endif/* ]WR */#endif#endif}