Exemple #1
0
int
recv(long sd, void *buf, long len, long flags)
{
    int ret;
    int index = 0;

    OS_semaphore_post(g_select_sleep_semaphore); //wakeup select thread if needed

    for (index = 0; index < MAX_NUM_OF_SOCKETS; index++){
        if (g_sockets[index].sd == sd){
            /* wait for data to become available */
            OS_semaphore_pend(g_sockets[index].sd_semaphore, e_WAIT_FOREVER);
        }
    }

    /* suspend select thread until waiting for more data */
    OS_semaphore_pend(g_select_sleep_semaphore, e_WAIT_FOREVER);

    if (g_wlan_stopped){ //if wlan_stop then return
        return -1;
    }

    /* call the original recv knowing there is available data
       and it's a non-blocking call */
    OS_mutex_lock(g_main_mutex, &mtx_key);
    ret = c_recv(sd, buf, len, flags);
    OS_mutex_unlock(g_main_mutex, mtx_key);

    return(ret);
}
void package_parse(int conn)
{
	int rc;
	PCK package;
	int pack_type;
	while(1)
	{
		bzero(&package,PCK_LEN);
		rc=c_recv(sockfd,&package,PCK_LEN,0);
		if(rc>0)
			printf("package received\n");
		else if(rc==0)
		{
			printf("client closed\n");
			break;
		}
		else
		{
			perror("receive error:\n");
			exit(1);
		}

		pack_type=parse_package(&package);

		switch(pack_type)
		{
			case 1:
			user_transations();
			break;

			case 2:
			msg_transactions();
			break;

			case 3:
			chis_transations();
			break;

			default:
			break;

		}
	}
	
}