| | |
| | | * Macro * |
| | | *******************************************************************************/ |
| | | /* SOICKET相关 */ |
| | | #define SOCKET_SEND_QUEUE_BUF_SIZE (512) |
| | | #define SOCKET_SEND_QUEUE_BUF_SIZE (1024) |
| | | #define SOCKET_RECV_QUEUE_BUF_SIZE (2000) |
| | | #define SOCKET_SEND_QUEUE_MEMBER_CNT 16 |
| | | #define SOCKET_RECV_QUEUE_MEMBER_CNT 16 |
| | |
| | | HIDO_BOOL m_bUseHeartbeat; |
| | | HIDO_UINT32 m_u32HeartbeatFreq; |
| | | HIDO_CHAR m_acHeartbeatData[128]; |
| | | }ST_SocketData; |
| | | } ST_SocketData; |
| | | |
| | | /******************************************************************************* |
| | | * Local Variable * |
| | |
| | | |
| | | switch (pstSocketData->m_eState) |
| | | { |
| | | case SOCKET_STATE_CONNECT: |
| | | case SOCKET_STATE_CLOSE_BEFORE_CONNECT: |
| | | case SOCKET_STATE_CONNECTED: |
| | | { |
| | | pstSocketData->m_bHasRecvData = HIDO_FALSE; |
| | | pstSocketData->m_eState = SOCKET_STATE_CLOSED; |
| | | case SOCKET_STATE_CONNECT: |
| | | case SOCKET_STATE_CLOSE_BEFORE_CONNECT: |
| | | case SOCKET_STATE_CONNECTED: |
| | | { |
| | | pstSocketData->m_bHasRecvData = HIDO_FALSE; |
| | | pstSocketData->m_eState = SOCKET_STATE_CLOSED; |
| | | |
| | | if (pstSocketData->m_fnEventProc != HIDO_NULL) |
| | | { |
| | | pstSocketData->m_fnEventProc(i32SockID, SOCKET_EVENT_CLOSED, pstSocketData->m_pArg); |
| | | } |
| | | break; |
| | | } |
| | | default: |
| | | if (pstSocketData->m_fnEventProc != HIDO_NULL) |
| | | { |
| | | break; |
| | | pstSocketData->m_fnEventProc(i32SockID, SOCKET_EVENT_CLOSED, pstSocketData->m_pArg); |
| | | } |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | /* 重置队列 */ |
| | | #if 0 |
| | | HIDO_VLQInit(&pstSocketData->m_stSendQueue, pstSocketData->l_au8SendQueueBuf, |
| | | SOCKET_SEND_QUEUE_BUF_SIZE, SOCKET_SEND_QUEUE_MEMBER_CNT); |
| | | SOCKET_SEND_QUEUE_BUF_SIZE, SOCKET_SEND_QUEUE_MEMBER_CNT); |
| | | if(SOCKET_TYPE_TCP == pstSocketData->m_eType) |
| | | { |
| | | HIDO_ArraryQueueInit(&pstSocketData->m_stTCPRecvQueue, pstSocketData->l_au8RecvQueueBuf, |
| | | SOCKET_RECV_QUEUE_BUF_SIZE, sizeof(HIDO_UINT8)); |
| | | SOCKET_RECV_QUEUE_BUF_SIZE, sizeof(HIDO_UINT8)); |
| | | } |
| | | else |
| | | { |
| | | HIDO_VLQInit(&pstSocketData->m_stRecvQueue, pstSocketData->l_au8RecvQueueBuf, |
| | | SOCKET_RECV_QUEUE_BUF_SIZE, SOCKET_RECV_QUEUE_MEMBER_CNT); |
| | | SOCKET_RECV_QUEUE_BUF_SIZE, SOCKET_RECV_QUEUE_MEMBER_CNT); |
| | | } |
| | | #endif |
| | | |
| | | |
| | | /* 通知上层 */ |
| | | if(pstSocketData->m_fnEventProc != HIDO_NULL) |
| | | { |
| | |
| | | |
| | | if(SOCKET_STATE_CLOSE_BEFORE_CONNECT == pstSocketData->m_eState) |
| | | { |
| | | return HIDO_ERR; |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | pstSocketData->m_eState = SOCKET_STATE_CLOSED; |
| | |
| | | { |
| | | for(i = 0; i < _u32Len; i++) |
| | | { |
| | | if(HIDO_ArraryQueueIn(&(pstSocketData->m_stTCPRecvQueue), &_pu8Data[i]) != HIDO_OK) |
| | | { |
| | | return HIDO_ERR; |
| | | } |
| | | if(HIDO_ArraryQueueIn(&(pstSocketData->m_stTCPRecvQueue), &_pu8Data[i]) != HIDO_OK) |
| | | { |
| | | return HIDO_ERR; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | HIDO_VLQMemberStruct *pstMember = HIDO_NULL; |
| | | HIDO_VLQMemberStruct *pstMember = HIDO_NULL; |
| | | |
| | | pstMember = HIDO_VLQGetEnqueueMember(&l_astSocketData[_i32SockID].m_stRecvQueue, _u32Len); |
| | | if (pstMember != HIDO_NULL) |
| | |
| | | pstSocketData->m_eState = SOCKET_STATE_CREATED; |
| | | pstSocketData->m_fnEventProc = _fnEventProc; |
| | | pstSocketData->m_pArg = _pArg; |
| | | |
| | | |
| | | HIDO_VLQInit(&pstSocketData->m_stSendQueue, pstSocketData->l_au8SendQueueBuf, |
| | | SOCKET_SEND_QUEUE_BUF_SIZE, SOCKET_SEND_QUEUE_MEMBER_CNT); |
| | | |
| | | SOCKET_SEND_QUEUE_BUF_SIZE, SOCKET_SEND_QUEUE_MEMBER_CNT); |
| | | |
| | | if(SOCKET_TYPE_TCP == _eSocketType) |
| | | { |
| | | HIDO_ArraryQueueInit(&pstSocketData->m_stTCPRecvQueue, pstSocketData->l_au8RecvQueueBuf, |
| | | SOCKET_RECV_QUEUE_BUF_SIZE, sizeof(HIDO_UINT8)); |
| | | HIDO_ArraryQueueInit(&pstSocketData->m_stTCPRecvQueue, pstSocketData->l_au8RecvQueueBuf, |
| | | SOCKET_RECV_QUEUE_BUF_SIZE, sizeof(HIDO_UINT8)); |
| | | } |
| | | else |
| | | { |
| | | HIDO_VLQInit(&pstSocketData->m_stRecvQueue, pstSocketData->l_au8RecvQueueBuf, |
| | | SOCKET_RECV_QUEUE_BUF_SIZE, SOCKET_RECV_QUEUE_MEMBER_CNT); |
| | | SOCKET_RECV_QUEUE_BUF_SIZE, SOCKET_RECV_QUEUE_MEMBER_CNT); |
| | | } |
| | | |
| | | *_pi32SockID = i32SockID; |
| | |
| | | } |
| | | |
| | | if(SOCKET_STATE_CLOSED == pstSocketData->m_eState || SOCKET_STATE_IDLE == pstSocketData->m_eState |
| | | || SOCKET_STATE_CONNECT_FAILED == pstSocketData->m_eState || SOCKET_STATE_CREATED == pstSocketData->m_eState) |
| | | || SOCKET_STATE_CONNECT_FAILED == pstSocketData->m_eState || SOCKET_STATE_CREATED == pstSocketData->m_eState) |
| | | { |
| | | *_pbResult = HIDO_TRUE; |
| | | *_pbResult = HIDO_TRUE; |
| | | } |
| | | else |
| | | { |
| | | *_pbResult = HIDO_FALSE; |
| | | *_pbResult = HIDO_FALSE; |
| | | } |
| | | |
| | | return HIDO_OK; |
| | |
| | | |
| | | if(SOCKET_TYPE_TCP == pstSocketData->m_eType) |
| | | { |
| | | HIDO_UINT32 i = 0; |
| | | HIDO_UINT32 u32RecvLen = 0; |
| | | HIDO_UINT32 i = 0; |
| | | HIDO_UINT32 u32RecvLen = 0; |
| | | |
| | | for(i = 0; i < _u32RecvBuffSize; i++) |
| | | { |
| | | if(HIDO_ArraryQueueOut(&pstSocketData->m_stTCPRecvQueue, &_pu8RecvBuff[i]) != HIDO_OK) |
| | | { |
| | | *_pu32RecvLen = u32RecvLen; |
| | | return HIDO_OK; |
| | | } |
| | | for(i = 0; i < _u32RecvBuffSize; i++) |
| | | { |
| | | if(HIDO_ArraryQueueOut(&pstSocketData->m_stTCPRecvQueue, &_pu8RecvBuff[i]) != HIDO_OK) |
| | | { |
| | | *_pu32RecvLen = u32RecvLen; |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | u32RecvLen++; |
| | | } |
| | | u32RecvLen++; |
| | | } |
| | | |
| | | *_pu32RecvLen = u32RecvLen; |
| | | i32Result = HIDO_OK; |
| | | *_pu32RecvLen = u32RecvLen; |
| | | i32Result = HIDO_OK; |
| | | } |
| | | else |
| | | { |