Drd64_Server_RecvStatus *gp_recv_resume_start;
Drd64_Server_RecvStatus *gp_recv_resume_end;
int gi_recv_resume_max;
+Drd64_Server_RecvStatus *gp_recv_sockets_start;
+Drd64_Server_RecvStatus *gp_recv_sockets_end;
int
free( gpp_recvstat );
gpp_recvstat = NULL;
- return;
+ return 0x00;
}
gp_recv_resume_start = NULL;
gi_recv_resume_max = FD_SETSIZE;
+ gp_recv_sockets_start = NULL;
+ gp_recv_sockets_end = NULL;
+
return 0x00;
}
{
Drd64_Server_RecvStatus_FreeRecvStatus_All();
- return;
+ return 0x00;
}
}
-EXTERN_SERVER_RECVSTATUS
void
Drd64_Server_RecvStatus_FreeRecvStatus(
+ Drd64_Server_RecvStatus *p_recv )
+{
+ assert( NULL != p_recv );
+
+ p_recv->pv_recv_before = NULL;
+ p_recv->pv_recv_next = NULL;
+
+ p_recv->i_recvstatus_id = -1;
+ p_recv->i_fds_id = -1;
+
+ return;
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+void
+ Drd64_Server_RecvStatus_CloseRecvStatus(
int i_fds )
{
int i_cnt;
if( 0 == i_cnt ) { gi_recvstat_max = 0; }
}
- p_recv_now->i_recvstatus_id = -1;
- p_recv_now->i_fds_id = -1;
+ Drd64_Server_RecvStatus_FreeRecvStatus( p_recv_now );
}
return;
p_recv_self->pv_recv_next = (void *)p_recv_before->pv_recv_next;
p_recv_before->pv_recv_next = (void *)p_recv_self;
gp_recv_resume_end = p_recv_self;
-
}
i_recv_id = i_cnt;
Drd64_Server_RecvStatus *p_recv_before;
Drd64_Server_RecvStatus *p_recv_next;
+
p_recv_self = *(gpp_recvstat + i_recv_id);
if( NULL == p_recv_self ) {
return 0x01;
p_recv_next->pv_recv_before = (void *)p_recv_before;
}
+ if( gp_recv_resume_end == p_recv_self ) {
+ gp_recv_resume_end = p_recv_before;
+ }
+
if( p_recv_self->i_recvstatus_id == (gi_recv_resume_max - 1) ) {
gi_recv_resume_max--;
}
}
*(gpp_recvstat + i_recv_id) = NULL;
- p_recv_self->pv_recv_before = NULL;
- p_recv_self->pv_recv_next = NULL;
+
+ Drd64_Server_RecvStatus_FreeRecvStatus( p_recv_self );
+
+ return 0x00;
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+int
+ Drd64_Server_RecvStatus_AddSocketsChain(
+ Drd64_Server_RecvStatus *p_recv )
+{
+ Drd64_Server_RecvStatus *p_before;
+
+ if( NULL == p_recv ) { return 0x01; }
+
+ p_before = gp_recv_sockets_end;
+
+ p_recv->pv_recv_before = (void *)p_before;
+ if( NULL != p_before )
+ { p_before->pv_recv_next = (void *)p_recv; }
+ else
+ { gp_recv_sockets_start = p_recv; }
+
+ gp_recv_sockets_end = p_recv;
+
+ return 0x00;
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+int
+ Drd64_Server_RecvStatus_DeleteSocketsChain(
+ Drd64_Server_RecvStatus *p_recv )
+{
+ Drd64_Server_RecvStatus *p_before;
+ Drd64_Server_RecvStatus *p_next;
+
+ if( NULL == p_recv ) { return -1; }
+
+ p_before = (Drd64_Server_RecvStatus *)p_recv->pv_recv_before;
+ p_next = (Drd64_Server_RecvStatus *)p_recv->pv_recv_next;
+
+ if( NULL != p_before )
+ { p_before->pv_recv_next = (void *)p_next; }
+ if( NULL != p_next )
+ { p_next->pv_recv_before = (void *)p_before; }
+
+ if( p_recv == gp_recv_sockets_start )
+ { gp_recv_sockets_start = p_next; }
+ if( p_recv == gp_recv_sockets_end )
+ { gp_recv_sockets_end = p_before; }
+
+ p_recv->pv_recv_next = NULL;
+ p_recv->pv_recv_before = NULL;
- p_recv_self->i_recvstatus_id = -1;
- p_recv_self->i_fds_id = -1;
+ return 0x00;
+}
+
+EXTERN_SERVER_RECVSTATUS
+void
+ Drd64_Server_RecvStatus_InitRecvStatus(
+ Drd64_Server_RecvStatus *p_recv,
+ int i_socket )
+{
+ assert( NULL != p_recv );
+
+ p_recv->i_read_phase = DRD64_SERVER_RECVSTATUS_PHASE_HEADER;
+ p_recv->b_recv_status = DRD64_SERVER_RECVSTATUS_STATUS_READ;
+ p_recv->i_command_status = DRD64_SERVER_CMDSTATUS_STATUS_NORMAL;
+ p_recv->i_remain_bytes = sizeof( Drd64_PacketHeader );
+ p_recv->pv_resume = p_recv->pv_buf;
+ p_recv->pv_recv_before = NULL;
+ p_recv->pv_recv_next = NULL;
+ p_recv->pv_cinfo_connection = NULL;
+ p_recv->i_fds_id = i_socket;
+
+ return;
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+int
+ Drd64_Server_RecvStatus_SetConnectionInfoPointer(
+ Drd64_Server_RecvStatus *p_recv_now,
+ void *pv_cinfo )
+{
+ int i_socket;
+ Drd64_Server_RecvStatus *p_recv_socket;
+
+ assert( NULL != p_recv_now );
+
+ p_recv_now->pv_cinfo_connection = pv_cinfo;
+
+ p_recv_socket = *(gpp_recvstat + p_recv_now->i_fds_id);
+ if(( NULL != p_recv_socket ) && ( p_recv_socket != p_recv_now )) {
+ assert( NULL == p_recv_socket->pv_cinfo_connection );
+ p_recv_socket->pv_cinfo_connection = pv_cinfo;
+ }
+
return 0x00;
}
EXTERN_SERVER_RECVSTATUS
Drd64_Server_RecvStatus *
- Drd64_Server_RecvStatus_GetResumeStart(
+ Drd64_Server_RecvStatus_GetResumeChainStart(
void )
{
return gp_recv_resume_start;
}
+
+EXTERN_SERVER_RECVSTATUS
+Drd64_Server_RecvStatus *
+ Drd64_Server_RecvStatus_GetSocketsChainStart(
+ void )
+{
+ return gp_recv_sockets_start;
+}
+
+
/* EOF of drd64_.c ----------------------------------- */