示例#1
0
文件: smbnet.c 项目: layerfsd/cifssmb
/*
==============
int rtsmb_net_read_simple () - Get data sent by a reliable connection.

    RTP_SOCKET sock - the socket over which the connection is operating
    void *pData - the buffer where data should be stored
    int size - the size in bytes of the data

    return - size of data or -1 for error
==============
*/
RTSMB_STATIC
int rtsmb_net_read_simple (RTP_SOCKET sock, PFVOID pData, int size)
{
    int bytesRead;

    if(!pData)
    {
        RTSMB_DEBUG_OUTPUT_STR("rtsmb_net_read_simple: NULL buffer\n", RTSMB_DEBUG_TYPE_ASCII);
        return -1;
    }

    bytesRead = rtp_net_recv (sock, pData, size);
    if (bytesRead == 0)
    {
        // other side has closed connection
        RTSMB_DEBUG_OUTPUT_STR("rtsmb_net_read_simple: Connection closed by remote client\n", RTSMB_DEBUG_TYPE_ASCII);
        return -1;
    }

    if(bytesRead < 0)
    {
        RTSMB_DEBUG_OUTPUT_STR("rtsmb_net_read_simple: Error in recv\n", RTSMB_DEBUG_TYPE_ASCII);
        return -1;
    }

    return bytesRead;
}
示例#2
0
/*---------------------------------------------------------------------------*/
HTTP_INT32 RtpNetSockReadFn  (void *streamPtr, HTTP_UINT8 *buffer, HTTP_INT32 min, HTTP_INT32 max)
{
	HTTP_INT32 retval;
	RtpNetSockStruct *s = (RtpNetSockStruct *) streamPtr;
	retval = rtp_net_recv(s->sockHandle, buffer, max);
	RTP_LOG_WRITE("HTTP SERVER READ", buffer, retval)
	return (retval);
}
int RTIP_SOCKETS_Driver::Recv(SOCK_SOCKET socket, char* buf, int len, int flags)
{ 
    NATIVE_PROFILE_PAL_NETWORK();
    int ret;
    int     nativeFlag;
    
    switch (flags)
    {
        case SOCKET_READ_PEEK_OPTION:
            nativeFlag = RTP_NET_MSG_PEEK;
            break;
        default:
            nativeFlag = flags;
            break;
    }
    
    ret = (int) rtp_net_recv ((RTP_HANDLE) socket, 
                               (unsigned char *) buf, 
                                len, nativeFlag);
                                
    return ret;
}
示例#4
0
文件: httpcli.c 项目: maojxsir/upnp
/*---------------------------------------------------------------------------*/
HTTP_INT32 _HTTP_ClientRead (
		void* streamPtr,
		HTTP_UINT8* buffer,
		HTTP_INT32 min,
		HTTP_INT32 max
	)
{
	HTTPClientSession* clientSession = (HTTPClientSession*) streamPtr;
	HTTP_INT32 totalRead = 0;
	HTTP_INT32 bytesRead;

	if (!buffer)
	{
		if (rtp_net_read_select(clientSession->netSock, 0) >= 0)
		{
			return (1);
		}
		else
		{
			return (HTTP_EWOULDBLOCK);
		}
	}

	/* sanity check for later */
	if (max < min)
	{
		max = min;
	}

	if (min > 0)
	{
		while (min > 0)
		{
			if (rtp_net_read_select(clientSession->netSock, HTTP_CLIENT_TIMEOUT_MSEC) < 0)
			{
				/* waited for the max timeout; no data, return error */
				return (HTTP_EIOFAILURE);
			}

			bytesRead = rtp_net_recv(clientSession->netSock, buffer + totalRead, max);

			/* if read select returned success, we shouldn't see these cases, but
			   just to be sure, handle them... */
			if (bytesRead == -1)
			{
				return (HTTP_EIOFAILURE);
			}
			else if (bytesRead == -2)
			{
				return (HTTP_EWOULDBLOCK);
			}
			else if (bytesRead == 0)
			{
				break;
			}

			min -= bytesRead;
			max -= bytesRead;
			totalRead += bytesRead;
		}
	}
	else
	{
        bytesRead = rtp_net_recv(clientSession->netSock, buffer + totalRead, max);

		if (bytesRead == -1)
		{
			return (HTTP_EIOFAILURE);
		}
		else if (bytesRead == -2)
		{
			return (HTTP_EWOULDBLOCK);
		}

		totalRead = bytesRead;
	}

	return (totalRead);
}