亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日日骚欧美日韩| 精品理论电影在线观看| 亚洲欧美一区二区三区孕妇| 99精品一区二区三区| 夜夜精品浪潮av一区二区三区| 欧美午夜影院一区| 免费亚洲电影在线| 久久尤物电影视频在线观看| 成人激情电影免费在线观看| 亚洲人妖av一区二区| 欧美三级中文字幕在线观看| 日韩成人一级大片| 国产日产欧美一区二区三区| 91麻豆自制传媒国产之光| 石原莉奈在线亚洲二区| 久久午夜羞羞影院免费观看| 91视频国产观看| 日本亚洲欧美天堂免费| 久久久www成人免费无遮挡大片| 91视频国产观看| 久久福利资源站| 亚洲视频免费观看| 日韩视频在线你懂得| 成人性色生活片免费看爆迷你毛片| 亚洲美女视频一区| 精品不卡在线视频| 日本伦理一区二区| 极品销魂美女一区二区三区| 成人免费一区二区三区在线观看 | 中日韩免费视频中文字幕| 91欧美一区二区| 精品一区中文字幕| 亚洲激情图片一区| 精品福利视频一区二区三区| 日本二三区不卡| 久久66热偷产精品| 午夜私人影院久久久久| 国产午夜亚洲精品不卡| 欧美精品一二三| 91视视频在线直接观看在线看网页在线看| 丝瓜av网站精品一区二区| 国产精品亲子伦对白| 日韩一区二区三区高清免费看看| 成人av资源网站| 国产一区二区免费视频| 亚洲成人精品一区二区| 日韩毛片精品高清免费| 国产偷国产偷精品高清尤物| 日韩一区二区影院| 欧美日韩卡一卡二| 91麻豆自制传媒国产之光| 国产不卡一区视频| 精品伊人久久久久7777人| 日韩中文字幕不卡| 一区二区三区免费在线观看| 国产精品色眯眯| 久久精品欧美日韩| 精品国产电影一区二区| 91精品欧美久久久久久动漫 | 91超碰这里只有精品国产| 99热在这里有精品免费| 成人免费视频播放| 成人精品视频一区二区三区尤物| 久久国产视频网| 蜜桃视频一区二区| 日本午夜一本久久久综合| 亚洲国产精品欧美一二99| 中文字幕一区av| 成人欧美一区二区三区白人 | 欧美大片在线观看一区| 91麻豆精品久久久久蜜臀| 在线区一区二视频| 欧美图区在线视频| 欧美做爰猛烈大尺度电影无法无天| 99re热这里只有精品免费视频| 成人av片在线观看| 91年精品国产| 在线视频亚洲一区| 欧美日韩午夜在线视频| 欧美日韩一二三| 欧美精品欧美精品系列| 7777精品伊人久久久大香线蕉 | av电影在线观看完整版一区二区| 国产v综合v亚洲欧| 99在线精品视频| 色综合天天综合给合国产| 91精品福利在线| 欧美日韩第一区日日骚| 欧美一区三区四区| 欧美成人女星排名| 欧美韩国日本不卡| 亚洲女同一区二区| 午夜精品久久久| 久久99国产精品久久99果冻传媒| 国产乱子轮精品视频| 成人av资源网站| 欧美日韩一二三区| 欧美精品一区二区三区很污很色的| 亚洲精品在线观看网站| 一区免费观看视频| 香蕉久久夜色精品国产使用方法| 美美哒免费高清在线观看视频一区二区| 国内成人精品2018免费看| 北条麻妃一区二区三区| 欧美系列日韩一区| 精品国产自在久精品国产| 最近中文字幕一区二区三区| 午夜欧美电影在线观看| 国产一区二区剧情av在线| 色噜噜偷拍精品综合在线| 欧美一级高清大全免费观看| 欧美国产1区2区| 日韩电影在线免费看| 国产成人精品1024| 欧美亚洲一区二区在线| 精品国产3级a| 亚洲一区二区高清| 国产91对白在线观看九色| 欧美日韩一区二区三区不卡| 精品电影一区二区三区| 亚洲一区二区三区影院| 九九**精品视频免费播放| 色天天综合久久久久综合片| 精品国产a毛片| 亚瑟在线精品视频| 91在线视频播放地址| 91精品国模一区二区三区| 国产精品无人区| 美女视频黄频大全不卡视频在线播放| 成人一区二区三区在线观看| 91精品国产综合久久久久久漫画| 国产精品日韩精品欧美在线| 久久疯狂做爰流白浆xx| 欧美日韩黄色一区二区| 国产精品视频第一区| 蜜臀av性久久久久蜜臀aⅴ | 欧美一级精品大片| 亚洲欧美日韩国产一区二区三区 | 国产精品私房写真福利视频| 视频在线观看国产精品| 成人黄色a**站在线观看| 亚洲精品一区二区精华| 偷拍亚洲欧洲综合| 色婷婷久久久综合中文字幕| 国产午夜亚洲精品羞羞网站| 久久精品国产一区二区| 欧美一区二区美女| 日韩精品乱码av一区二区| 在线观看免费视频综合| 中文字幕不卡在线播放| 国产精品一区二区在线观看不卡| 欧美精品久久99久久在免费线 | 日韩午夜av电影| 天天综合网 天天综合色| 一本高清dvd不卡在线观看| 中文字幕第一区| 成人国产精品视频| 国产精品久久久久婷婷| 国产99久久精品| 欧美韩国日本不卡| 高清国产一区二区| 欧美韩国日本综合| 成人av在线一区二区| 日韩理论在线观看| 日本韩国一区二区三区视频| 亚洲婷婷在线视频| 色88888久久久久久影院野外| 亚洲美女电影在线| 在线观看亚洲一区| 天天综合天天综合色| 欧美一区二区三区精品| 蓝色福利精品导航| 久久亚洲精华国产精华液| 国产超碰在线一区| 中文字幕综合网| 欧美亚洲一区二区三区四区| 日韩在线播放一区二区| 日韩欧美一区电影| 国产毛片精品视频| 国产精品不卡在线观看| 在线观看欧美精品| 日本强好片久久久久久aaa| 精品国产伦理网| 99久久综合国产精品| 亚洲亚洲精品在线观看| 欧美一区二区黄| 国产一区二区三区免费| 国产精品福利av| 欧美午夜宅男影院| 激情图片小说一区| 国产精品久久一卡二卡| 欧美视频一区二区在线观看| 老司机免费视频一区二区| 欧美激情一区二区三区在线| 色av综合在线| 久久国产婷婷国产香蕉| 亚洲天堂2016| 日韩一区二区中文字幕| 丁香亚洲综合激情啪啪综合| 亚洲高清在线视频|