/* ============== 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; }
/*---------------------------------------------------------------------------*/ 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; }
/*---------------------------------------------------------------------------*/ 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); }