コード例 #1
0
ファイル: main.c プロジェクト: iYefeng/acl
static void echo_client(ACL_FIBER *fiber, void *ctx)
{
	ACL_VSTREAM *cstream = (ACL_VSTREAM *) ctx;
	char  buf[8192];
	int   ret, count = 0;
	int   ntimeout = 0;
	FIBER_TIMER *ft = (FIBER_TIMER *) acl_mymalloc(sizeof(FIBER_TIMER));

	ft->fiber = fiber;
	ft->timer = acl_fiber_create_timer(__rw_timeout * 1000,
			320000, io_timer, ft);
	ft->conn  = cstream;

#define	SOCK ACL_VSTREAM_SOCK

	while (1) {
		printf("begin read\n");
		ret = acl_vstream_gets(cstream, buf, sizeof(buf) - 1);

		if (ret == ACL_VSTREAM_EOF) {
			printf("fiber-%d, gets error: %s, %d, %d, fd: %d, "
				"count: %d\r\n", acl_fiber_id(fiber),
				acl_last_serror(), errno, acl_fiber_errno(fiber),
				SOCK(cstream), count);

			if (errno != ETIMEDOUT)
				break;

			if (++ntimeout > 2)
			{
				printf("too many timeout: %d\r\n", ntimeout);
				break;
			}

			printf("ntimeout: %d\r\n", ntimeout);
			ft->timer = acl_fiber_create_timer(__rw_timeout * 1000,
					320000, io_timer, ft);
		}

		acl_fiber_reset_timer(ft->timer, __rw_timeout * 1000);
		buf[ret] = 0;
		//printf("gets line: %s", buf);

		if (acl_vstream_writen(cstream, buf, ret) == ACL_VSTREAM_EOF) {
			printf("write error, fd: %d\r\n", SOCK(cstream));
			break;
		}

		count++;
	}

	acl_myfree(ft);
	acl_vstream_close(cstream);
}
コード例 #2
0
ファイル: store_sock.c プロジェクト: IIJ-NetBSD/netbsd-src
static int
socket_trunc(krb5_storage * sp, off_t offset)
{
    if (ftruncate(SOCK(sp), offset) == -1)
	return errno;
    return 0;
}
コード例 #3
0
ファイル: store_sock.c プロジェクト: IIJ-NetBSD/netbsd-src
static int
socket_sync(krb5_storage * sp)
{
    if (fsync(SOCK(sp)) == -1)
	return errno;
    return 0;
}
コード例 #4
0
ファイル: store_sock.c プロジェクト: IIJ-NetBSD/netbsd-src
static void
socket_free(krb5_storage * sp)
{
    int save_errno = errno;
    if (rk_IS_SOCKET_ERROR(rk_closesocket(SOCK(sp))))
        errno = rk_SOCK_ERRNO;
    else
        errno = save_errno;
}
コード例 #5
0
ファイル: store_sock.c プロジェクト: IIJ-NetBSD/netbsd-src
KRB5_LIB_FUNCTION krb5_storage * KRB5_LIB_CALL
krb5_storage_from_socket(krb5_socket_t sock_in)
{
    krb5_storage *sp;
    int saved_errno;
    krb5_socket_t sock;

#ifdef _WIN32
    WSAPROTOCOL_INFO info;

    if (WSADuplicateSocket(sock_in, GetCurrentProcessId(), &info) == 0)
    {

	sock = WSASocket( FROM_PROTOCOL_INFO,
			  FROM_PROTOCOL_INFO,
			  FROM_PROTOCOL_INFO,
			  &info, 0, 0);
    }
#else
    sock = dup(sock_in);
#endif

    if (sock == rk_INVALID_SOCKET)
	return NULL;

    errno = ENOMEM;
    sp = malloc(sizeof(krb5_storage));
    if (sp == NULL) {
	saved_errno = errno;
	rk_closesocket(sock);
	errno = saved_errno;
	return NULL;
    }

    errno = ENOMEM;
    sp->data = malloc(sizeof(socket_storage));
    if (sp->data == NULL) {
	saved_errno = errno;
	rk_closesocket(sock);
	free(sp);
	errno = saved_errno;
	return NULL;
    }
    sp->flags = 0;
    sp->eof_code = HEIM_ERR_EOF;
    SOCK(sp) = sock;
    sp->fetch = socket_fetch;
    sp->store = socket_store;
    sp->seek = socket_seek;
    sp->trunc = socket_trunc;
    sp->fsync = socket_sync;
    sp->free = socket_free;
    sp->max_alloc = UINT_MAX/8;
    return sp;
}
コード例 #6
0
ファイル: main.c プロジェクト: BMW007/AMBE_Demo
int main(void)
{
	BYTE nI;
	 LED_Init();
	USART1_Config();                           //串口初始化
	WT_GPIO_Config();                          //控制WT1000的IO引脚初始化
	AMBEReset();                               //复位WT1K和WT1027
	
	SOCK(0);
	SOSTRB(1);
	PD2(0);                                     //串行模式下PD2必须下拉或者接地
	
	pFrameData[0] = 0x13;
	pFrameData[1] = 0xec;
	for(nI = 2; nI < 34; nI++)
	{
		pFrameData[nI] = 0;                       //初始化pFrameData数组
	}
	
	while(!EPR);
	AMBEReadSerial();
	
	while(1)                                     
	{
		LED0=~LED0;
		while(!EPR);                             //读EPR信号

		AMBEReadSerial();                        //串行读WT1K编码数据
		LoadreadBUF();                           //将独到的语音编码数据放到发送缓冲区pTXBUF中
		UART1SendData(pTXBUF,VOICELENGTH+2);     //串口发送
		while(!DPE);                             //读DPE信号
		if(bReceived ==1)                        //串口中断接收到一包完整的数据bReceived=1;收到的数据放在接收缓冲区pRXBUF
		{	
			noReceived=0;
			LoadFrame();                           //将接收缓冲区pRXBUF的语音数据移到pFrameData中
			AMBEWriteSerial();                     //串行写WT1K
			bReceived = 0;
		}
		else
		{	
			noReceived++;
			if(noReceived==4)                       //连续4包没收到完整数据向WT1K写静音数据
			{
				noReceived=3;
				LoadNoVoice();
				AMBEWriteSerial();
			}
		}
	}
}
コード例 #7
0
ファイル: store_sock.c プロジェクト: IIJ-NetBSD/netbsd-src
static off_t
socket_seek(krb5_storage * sp, off_t offset, int whence)
{
    return lseek(SOCK(sp), offset, whence);
}
コード例 #8
0
ファイル: store_sock.c プロジェクト: IIJ-NetBSD/netbsd-src
static ssize_t
socket_store(krb5_storage * sp, const void *data, size_t size)
{
    return net_write(SOCK(sp), data, size);
}
コード例 #9
0
ファイル: store_sock.c プロジェクト: IIJ-NetBSD/netbsd-src
static ssize_t
socket_fetch(krb5_storage * sp, void *data, size_t size)
{
    return net_read(SOCK(sp), data, size);
}