亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ioq_tcp.c

?? 基于sip協議的網絡電話源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* $Id: ioq_tcp.c 974 2007-02-19 01:13:53Z bennylp $ *//*  * Copyright (C)2003-2007 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#include "test.h"/** * \page page_pjlib_ioqueue_tcp_test Test: I/O Queue (TCP) * * This file provides implementation to test the * functionality of the I/O queue when TCP socket is used. * * * This file is <b>pjlib-test/ioq_tcp.c</b> * * \include pjlib-test/ioq_tcp.c */#if INCLUDE_TCP_IOQUEUE_TEST#include <pjlib.h>#if PJ_HAS_TCP#define THIS_FILE	    "test_tcp"#define NON_EXISTANT_PORT   50123#define LOOP		    100#define BUF_MIN_SIZE	    32#define BUF_MAX_SIZE	    2048#define SOCK_INACTIVE_MIN   (4-2)#define SOCK_INACTIVE_MAX   (PJ_IOQUEUE_MAX_HANDLES - 2)#define POOL_SIZE	    (2*BUF_MAX_SIZE + SOCK_INACTIVE_MAX*128 + 2048)static pj_ssize_t	     callback_read_size,                             callback_write_size,                             callback_accept_status,                             callback_connect_status;static pj_ioqueue_key_t     *callback_read_key,                            *callback_write_key,                            *callback_accept_key,                            *callback_connect_key;static pj_ioqueue_op_key_t  *callback_read_op,                            *callback_write_op,                            *callback_accept_op;static void on_ioqueue_read(pj_ioqueue_key_t *key,                             pj_ioqueue_op_key_t *op_key,                            pj_ssize_t bytes_read){    callback_read_key = key;    callback_read_op = op_key;    callback_read_size = bytes_read;}static void on_ioqueue_write(pj_ioqueue_key_t *key,                              pj_ioqueue_op_key_t *op_key,                             pj_ssize_t bytes_written){    callback_write_key = key;    callback_write_op = op_key;    callback_write_size = bytes_written;}static void on_ioqueue_accept(pj_ioqueue_key_t *key,                               pj_ioqueue_op_key_t *op_key,                              pj_sock_t sock,                               int status){    if (sock == PJ_INVALID_SOCKET) {	if (status != PJ_SUCCESS) {	    /* Ignore. Could be blocking error */	    app_perror(".....warning: received error in on_ioqueue_accept() callback",		       status);	} else {	    callback_accept_status = -61;	    PJ_LOG(3,("", "..... on_ioqueue_accept() callback was given "			  "invalid socket and status is %d", status));	}    } else {	callback_accept_key = key;	callback_accept_op = op_key;	callback_accept_status = status;    }}static void on_ioqueue_connect(pj_ioqueue_key_t *key, int status){    callback_connect_key = key;    callback_connect_status = status;}static pj_ioqueue_callback test_cb = {    &on_ioqueue_read,    &on_ioqueue_write,    &on_ioqueue_accept,    &on_ioqueue_connect,};static int send_recv_test(pj_ioqueue_t *ioque,			  pj_ioqueue_key_t *skey,			  pj_ioqueue_key_t *ckey,			  void *send_buf,			  void *recv_buf,			  pj_ssize_t bufsize,			  pj_timestamp *t_elapsed){    pj_status_t status;    pj_ssize_t bytes;    pj_time_val timeout;    pj_timestamp t1, t2;    int pending_op = 0;    pj_ioqueue_op_key_t read_op, write_op;    // Start reading on the server side.    bytes = bufsize;    status = pj_ioqueue_recv(skey, &read_op, recv_buf, &bytes, 0);    if (status != PJ_SUCCESS && status != PJ_EPENDING) {        app_perror("...pj_ioqueue_recv error", status);	return -100;    }        if (status == PJ_EPENDING)        ++pending_op;    else {        /* Does not expect to return error or immediate data. */        return -115;    }    // Randomize send buffer.    pj_create_random_string((char*)send_buf, bufsize);    // Starts send on the client side.    bytes = bufsize;    status = pj_ioqueue_send(ckey, &write_op, send_buf, &bytes, 0);    if (status != PJ_SUCCESS && bytes != PJ_EPENDING) {	return -120;    }    if (status == PJ_EPENDING) {	++pending_op;    }    // Begin time.    pj_get_timestamp(&t1);    // Reset indicators    callback_read_size = callback_write_size = 0;    callback_read_key = callback_write_key = NULL;    callback_read_op = callback_write_op = NULL;    // Poll the queue until we've got completion event in the server side.    status = 0;    while (pending_op > 0) {        timeout.sec = 1; timeout.msec = 0;	status = pj_ioqueue_poll(ioque, &timeout);	if (status > 0) {            if (callback_read_size) {                if (callback_read_size != bufsize)                    return -160;                if (callback_read_key != skey)                    return -161;                if (callback_read_op != &read_op)                    return -162;            }            if (callback_write_size) {                if (callback_write_key != ckey)                    return -163;                if (callback_write_op != &write_op)                    return -164;            }	    pending_op -= status;	}        if (status == 0) {            PJ_LOG(3,("", "...error: timed out"));        }	if (status < 0) {	    return -170;	}    }    // Pending op is zero.    // Subsequent poll should yield zero too.    timeout.sec = timeout.msec = 0;    status = pj_ioqueue_poll(ioque, &timeout);    if (status != 0)        return -173;    // End time.    pj_get_timestamp(&t2);    t_elapsed->u32.lo += (t2.u32.lo - t1.u32.lo);    // Compare recv buffer with send buffer.    if (pj_memcmp(send_buf, recv_buf, bufsize) != 0) {	return -180;    }    // Success    return 0;}/* * Compliance test for success scenario. */static int compliance_test_0(void){    pj_sock_t ssock=-1, csock0=-1, csock1=-1;    pj_sockaddr_in addr, client_addr, rmt_addr;    int client_addr_len;    pj_pool_t *pool = NULL;    char *send_buf, *recv_buf;    pj_ioqueue_t *ioque = NULL;    pj_ioqueue_key_t *skey, *ckey0, *ckey1;    pj_ioqueue_op_key_t accept_op;    int bufsize = BUF_MIN_SIZE;    pj_ssize_t status = -1;    int pending_op = 0;    pj_timestamp t_elapsed;    pj_str_t s;    pj_status_t rc;    // Create pool.    pool = pj_pool_create(mem, NULL, POOL_SIZE, 4000, NULL);    // Allocate buffers for send and receive.    send_buf = (char*)pj_pool_alloc(pool, bufsize);    recv_buf = (char*)pj_pool_alloc(pool, bufsize);    // Create server socket and client socket for connecting    rc = pj_sock_socket(PJ_AF_INET, PJ_SOCK_STREAM, 0, &ssock);    if (rc != PJ_SUCCESS) {        app_perror("...error creating socket", rc);        status=-1; goto on_error;    }    rc = pj_sock_socket(PJ_AF_INET, PJ_SOCK_STREAM, 0, &csock1);    if (rc != PJ_SUCCESS) {        app_perror("...error creating socket", rc);	status=-1; goto on_error;    }    // Bind server socket.    pj_sockaddr_in_init(&addr, 0, 0);    if ((rc=pj_sock_bind(ssock, &addr, sizeof(addr))) != 0 ) {        app_perror("...bind error", rc);	status=-10; goto on_error;    }    // Get server address.    client_addr_len = sizeof(addr);    rc = pj_sock_getsockname(ssock, &addr, &client_addr_len);    if (rc != PJ_SUCCESS) {        app_perror("...ERROR in pj_sock_getsockname()", rc);	status=-15; goto on_error;    }    addr.sin_addr = pj_inet_addr(pj_cstr(&s, "127.0.0.1"));    // Create I/O Queue.    rc = pj_ioqueue_create(pool, PJ_IOQUEUE_MAX_HANDLES, &ioque);    if (rc != PJ_SUCCESS) {        app_perror("...ERROR in pj_ioqueue_create()", rc);	status=-20; goto on_error;    }    // Register server socket and client socket.    rc = pj_ioqueue_register_sock(pool, ioque, ssock, NULL, &test_cb, &skey);    if (rc == PJ_SUCCESS)        rc = pj_ioqueue_register_sock(pool, ioque, csock1, NULL, &test_cb,                                       &ckey1);    else        ckey1 = NULL;    if (rc != PJ_SUCCESS) {        app_perror("...ERROR in pj_ioqueue_register_sock()", rc);	status=-23; goto on_error;    }    // Server socket listen().    if (pj_sock_listen(ssock, 5)) {        app_perror("...ERROR in pj_sock_listen()", rc);	status=-25; goto on_error;    }    // Server socket accept()    client_addr_len = sizeof(pj_sockaddr_in);    status = pj_ioqueue_accept(skey, &accept_op, &csock0,                                &client_addr, &rmt_addr, &client_addr_len);    if (status != PJ_EPENDING) {        app_perror("...ERROR in pj_ioqueue_accept()", rc);	status=-30; goto on_error;    }    if (status==PJ_EPENDING) {	++pending_op;    }    // Client socket connect()    status = pj_ioqueue_connect(ckey1, &addr, sizeof(addr));    if (status!=PJ_SUCCESS && status != PJ_EPENDING) {        app_perror("...ERROR in pj_ioqueue_connect()", rc);	status=-40; goto on_error;    }    if (status==PJ_EPENDING) {	++pending_op;    }    // Poll until connected    callback_read_size = callback_write_size = 0;    callback_accept_status = callback_connect_status = -2;    callback_read_key = callback_write_key =         callback_accept_key = callback_connect_key = NULL;    callback_accept_op = callback_read_op = callback_write_op = NULL;    while (pending_op) {	pj_time_val timeout = {1, 0};	status=pj_ioqueue_poll(ioque, &timeout);	if (status > 0) {            if (callback_accept_status != -2) {                if (callback_accept_status != 0) {                    status=-41; goto on_error;                }                if (callback_accept_key != skey) {                    status=-42; goto on_error;                }                if (callback_accept_op != &accept_op) {                    status=-43; goto on_error;                }                callback_accept_status = -2;            }            if (callback_connect_status != -2) {                if (callback_connect_status != 0) {                    status=-50; goto on_error;                }                if (callback_connect_key != ckey1) {                    status=-51; goto on_error;                }                callback_connect_status = -2;            }	    if (status > pending_op) {		PJ_LOG(3,(THIS_FILE,			  "...error: pj_ioqueue_poll() returned %d "			  "(only expecting %d)",			  status, pending_op));		return -52;	    }	    pending_op -= status;	    if (pending_op == 0) {		status = 0;	    }	}    }    // There's no pending operation.    // When we poll the ioqueue, there must not be events.    if (pending_op == 0) {        pj_time_val timeout = {1, 0};        status = pj_ioqueue_poll(ioque, &timeout);        if (status != 0) {            status=-60; goto on_error;        }    }    // Check accepted socket.    if (csock0 == PJ_INVALID_SOCKET) {	status = -69;        app_perror("...accept() error", pj_get_os_error());	goto on_error;    }    // Register newly accepted socket.    rc = pj_ioqueue_register_sock(pool, ioque, csock0, NULL,                                   &test_cb, &ckey0);    if (rc != PJ_SUCCESS) {        app_perror("...ERROR in pj_ioqueue_register_sock", rc);	status = -70;	goto on_error;    }    // Test send and receive.    t_elapsed.u32.lo = 0;    status = send_recv_test(ioque, ckey0, ckey1, send_buf,                             recv_buf, bufsize, &t_elapsed);    if (status != 0) {	goto on_error;    }    // Success    status = 0;on_error:    if (ssock != PJ_INVALID_SOCKET)	pj_sock_close(ssock);    if (csock1 != PJ_INVALID_SOCKET)	pj_sock_close(csock1);    if (csock0 != PJ_INVALID_SOCKET)	pj_sock_close(csock0);    if (ioque != NULL)	pj_ioqueue_destroy(ioque);    pj_pool_release(pool);    return status;}/* * Compliance test for failed scenario. * In this case, the client connects to a non-existant service. */static int compliance_test_1(void){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
777久久久精品| 亚洲午夜私人影院| 国产成人在线视频网站| 欧美色涩在线第一页| 亚洲色图丝袜美腿| 日本久久一区二区三区| 中文字幕一区免费在线观看| 国产不卡一区视频| 亚洲欧美怡红院| 日本精品视频一区二区| 亚洲国产中文字幕在线视频综合| 91精品国产色综合久久ai换脸 | 亚洲电影一级黄| 欧美久久久久久久久中文字幕| 亚洲大片精品永久免费| 欧美日韩一区精品| 精久久久久久久久久久| 亚洲国产精品ⅴa在线观看| 欧美大片一区二区| 欧美亚洲动漫另类| 欧美国产成人精品| 亚洲精品网站在线观看| 国产丶欧美丶日本不卡视频| 亚洲视频一区二区在线观看| 国产精品免费久久| 亚洲国产精华液网站w| 国产精品网站在线观看| 久久久久久久久久久久久久久99 | 精品久久久久久久久久久久久久久| 亚洲裸体xxx| 日韩视频不卡中文| 国产成人精品在线看| 亚洲精品国产一区二区精华液| 欧美性一二三区| 国产成人在线免费| 亚洲一线二线三线视频| 久久五月婷婷丁香社区| 色综合夜色一区| 国产伦精品一区二区三区免费| 国产精品亲子伦对白| 欧美一区二区三区色| 在线观看国产91| 亚洲一级不卡视频| 亚洲视频免费在线| 亚洲国产精品久久人人爱蜜臀 | 日韩一区二区三区av| 欧美日韩一级大片网址| 91在线无精精品入口| 9久草视频在线视频精品| eeuss鲁一区二区三区| 丁香五精品蜜臀久久久久99网站| 国产91在线观看| caoporen国产精品视频| 91福利视频在线| 欧美日韩高清影院| 久久久99久久精品欧美| ...av二区三区久久精品| 樱桃国产成人精品视频| 久久精品国产免费| 福利一区福利二区| 日本国产一区二区| 91精品久久久久久蜜臀| 国产精品久线在线观看| 亚洲黄色性网站| 精品一区二区三区免费毛片爱| 国产成人aaa| 欧美人伦禁忌dvd放荡欲情| 日韩欧美一级在线播放| 国产精品卡一卡二| 午夜精品久久久久久久久久| 精品一区二区三区免费| 色婷婷精品大在线视频| 国产精品五月天| 日韩女优av电影在线观看| 久久日韩粉嫩一区二区三区| 极品少妇一区二区三区精品视频| 日韩精品专区在线| 国产成人av电影| 亚洲激情自拍偷拍| 日韩一级高清毛片| 丁香婷婷综合色啪| 久久综合九色综合97婷婷| 亚洲高清视频的网址| aaa欧美色吧激情视频| 国产婷婷一区二区| 国产精品白丝av| 精品福利一二区| 国产精品一区二区三区99| 日韩欧美精品在线视频| 免费成人av资源网| 91 com成人网| 蜜桃av一区二区三区电影| 欧美xxxxx牲另类人与| 国产一区美女在线| 日本一区二区成人| 一本大道久久a久久综合婷婷| 一区二区在线看| 欧美影片第一页| 麻豆91在线看| 国产亚洲综合在线| 成人性生交大片免费看视频在线 | 亚洲精品视频在线观看免费| 国产成人在线电影| 国产精品高潮久久久久无| 26uuu国产一区二区三区| 久久精品国产99久久6| 日韩欧美一级片| 国产精品一色哟哟哟| 国产人妖乱国产精品人妖| 91久久久免费一区二区| 秋霞电影网一区二区| 2021国产精品久久精品| 国产精一区二区三区| 亚洲精品乱码久久久久久久久| 884aa四虎影成人精品一区| 粉嫩蜜臀av国产精品网站| 亚洲高清在线视频| 国产精品每日更新在线播放网址 | 色综合天天视频在线观看| 亚洲成人精品影院| 亚洲同性同志一二三专区| 日韩午夜小视频| 欧美专区亚洲专区| 91玉足脚交白嫩脚丫在线播放| 日本亚洲一区二区| 亚洲成年人影院| 亚洲欧美日韩国产中文在线| 日韩久久免费av| 91麻豆精品国产无毒不卡在线观看| 国产成人精品综合在线观看| 日韩成人精品在线| 日韩精品福利网| 亚洲国产乱码最新视频| 日韩理论片中文av| 国产精品乱码人人做人人爱 | 亚洲一区二区三区激情| 国产亚洲精品中文字幕| 欧美精品在线一区二区三区| 欧美伊人精品成人久久综合97| 一本色道久久综合亚洲91| 91色综合久久久久婷婷| 欧美亚洲高清一区| 欧美猛男gaygay网站| 欧美一级搡bbbb搡bbbb| 欧美xxxxx牲另类人与| 中文字幕一区二区三区四区不卡| 最新国产精品久久精品| 亚洲精品欧美综合四区| 狠狠色丁香婷婷综合| 91香蕉视频污在线| 欧美大片日本大片免费观看| 亚洲免费观看高清完整版在线观看熊 | 久久综合给合久久狠狠狠97色69| 日韩欧美在线123| 日韩女优电影在线观看| 亚洲国产精品成人综合色在线婷婷| 亚洲国产成人私人影院tom | 2024国产精品| 欧美激情在线免费观看| 中文字幕中文字幕一区| 亚洲精品免费视频| 人人狠狠综合久久亚洲| 国内不卡的二区三区中文字幕 | 欧美亚一区二区| 欧美精品一区二区三区蜜臀| 成人欧美一区二区三区| 天天影视色香欲综合网老头| 国产精品中文字幕日韩精品 | 91理论电影在线观看| 91精品国产免费| 最新成人av在线| 免费欧美高清视频| 99久久99久久久精品齐齐| 日韩欧美123| 亚洲午夜激情av| 国产福利视频一区二区三区| 日本道色综合久久| 国产精品卡一卡二卡三| 天天做天天摸天天爽国产一区| 国产成人夜色高潮福利影视| 欧美亚洲尤物久久| 国产精品看片你懂得| 精品一区二区影视| 欧美乱妇23p| 亚洲成a天堂v人片| 在线视频一区二区三区| 中文字幕一区二区三区精华液| 国产精品1区2区| 国产亚洲精品aa午夜观看| 三级亚洲高清视频| 欧美日韩卡一卡二| 日韩电影一区二区三区四区| 色妹子一区二区| 亚洲男人都懂的| 一本一道波多野结衣一区二区| 国产精品第四页| 91麻豆自制传媒国产之光| 亚洲蜜桃精久久久久久久| 91浏览器入口在线观看| 亚洲午夜免费电影|