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

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

?? socket.c

?? eCos/RedBoot for勤研ARM AnywhereII(4510) 含全部源代碼
?? C
字號:
//==========================================================================
//
//      socket.c
//
//      Test socket API
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos 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 or (at your option) any later version.
//
// eCos 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 eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s):           nickg
// Contributors:        nickg
// Date:                2000-05-25
// Purpose:             Test socket API
// Description:         This program tests the socket API. Note that it is only
//                      intended to test the API and not the functionality of
//                      the underlying network stack. That is assumed to have
//                      been established by other tests elsewhere.
//
//####DESCRIPTIONEND####
//
//==========================================================================

#include <pkgconf/hal.h>
#include <pkgconf/kernel.h>
#include <pkgconf/io_fileio.h>


#define __ECOS 1

#include <cyg/kernel/ktypes.h>         // base kernel types
#include <cyg/infra/cyg_trac.h>        // tracing macros
#include <cyg/infra/cyg_ass.h>         // assertion macros

#include <cyg/infra/testcase.h>

#if defined(CYGPKG_NET) && defined(CYGPKG_POSIX)
             
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>

#include <network.h>
#include <arpa/inet.h>

#include <pthread.h>
#include <signal.h>


#include <cyg/infra/diag.h>            // HAL polled output

//--------------------------------------------------------------------------

#define SHOW_RESULT( _fn, _res ) \diag_printf(#_fn " returned %d %s\n", _res, _res<0?strerror(errno):"");

//--------------------------------------------------------------------------
// Thread stack.

char thread1_stack[PTHREAD_STACK_MIN*2];
char thread2_stack[PTHREAD_STACK_MIN*2];

//--------------------------------------------------------------------------
// Local variables

// Thread IDs
pthread_t thread1;
pthread_t thread2;

struct sockaddr_in sa;

//--------------------------------------------------------------------------
// test buffers

#define TEST_BUFSIZE 512

static char buf1[TEST_BUFSIZE];
static char buf2[TEST_BUFSIZE];
static char buf3[TEST_BUFSIZE];

//--------------------------------------------------------------------------

void *pthread_entry1( void *arg)
{
    int fd, fd2;
    struct sockaddr_in accsa;
    socklen_t accsa_len = sizeof(accsa);
    int err;
//    int one = 1;
//    int so1 = sizeof(one);
    fd_set rd;
    int i;
    ssize_t done;
    
    CYG_TEST_INFO( "Thread 1 running" );

    CYG_TEST_INFO( "Thread1: calling socket()");        
    fd = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    if( fd < 0 ) SHOW_RESULT( socket, fd );
    CYG_TEST_CHECK( fd >= 0, "socket() returned error");

//    err = setsockopt( fd, SOL_SOCKET, SO_DONTROUTE, (void *)&one, so1);
//    if( err < 0 ) SHOW_RESULT( setsockopt, err );
//    CYG_TEST_CHECK( err == 0, "setsockopt() returned error");

    CYG_TEST_INFO( "Thread1: calling bind()");
    err = bind( fd, (struct sockaddr *)&sa, sizeof(sa));
    if( err < 0 ) SHOW_RESULT( bind, err );    
    CYG_TEST_CHECK( err == 0, "bind() returned error");

    CYG_TEST_INFO( "Thread1: calling listen()");
    err = listen( fd, 1);
    if( err < 0 ) SHOW_RESULT( listen, err );    
    CYG_TEST_CHECK( err == 0, "listen() returned error");

    FD_ZERO( &rd );
    FD_SET( fd, &rd );

    CYG_TEST_INFO( "Thread1: calling select()");
    err = select( fd+1, &rd, NULL, NULL, NULL );
    if( err < 0 ) SHOW_RESULT( select, err );    
    CYG_TEST_CHECK( err >= 0, "select() returned error");    
    CYG_TEST_CHECK( FD_ISSET( fd, &rd ), "Fd not set in select() result");

    CYG_TEST_INFO( "Thread1: calling accept()");
    fd2 = accept( fd, (struct sockaddr *)&accsa, &accsa_len );
    if( fd2 < 0 ) SHOW_RESULT( accept, fd2 );    
    CYG_TEST_CHECK( fd2 >= 0, "accept() returned error");


    for( i = 0; i < TEST_BUFSIZE; i++ ) buf1[i] = i;

    CYG_TEST_INFO( "Thread1: calling write()");
    done = write( fd2, buf1, TEST_BUFSIZE);
    if( done != TEST_BUFSIZE ) SHOW_RESULT( write, done );
    CYG_TEST_CHECK( done == TEST_BUFSIZE, "write() returned bad size");    

    FD_ZERO( &rd );
    FD_SET( fd2, &rd );

    CYG_TEST_INFO( "Thread1: calling select()");
    err = select( fd2+1, &rd, NULL, NULL, NULL );
    if( err < 0 ) SHOW_RESULT( select, err );    
    CYG_TEST_CHECK( err >= 0, "select() returned error");    
    CYG_TEST_CHECK( FD_ISSET( fd2, &rd ), "Fd2 not set in select() result");
    
    CYG_TEST_INFO( "Thread1: calling read()");
    done = read( fd2, buf3, TEST_BUFSIZE);
    if( done != TEST_BUFSIZE ) SHOW_RESULT( read, done );
    CYG_TEST_CHECK( done == TEST_BUFSIZE, "read() returned bad size");    

    for( i = 0; i < TEST_BUFSIZE; i++ )
        if( buf1[i] != buf3[i] )
            diag_printf("buf1[%d](%02x) != buf3[%d](%02x)\n",i,buf1[i],i,buf3[i]);

    CYG_TEST_INFO( "Thread1: calling close(fd)");
    err = close(fd);
    if( err < 0 ) SHOW_RESULT( close, err );    
    CYG_TEST_CHECK( err == 0, "close() returned error");    

    CYG_TEST_INFO( "Thread1: calling close(fd2)");
    err = close(fd2);
    if( err < 0 ) SHOW_RESULT( close, err );    
    CYG_TEST_CHECK( err == 0, "close() returned error");        
    
    CYG_TEST_INFO( "Thread1: calling pthread_exit()");    
    pthread_exit( arg );
}

//--------------------------------------------------------------------------

void *pthread_entry2( void *arg)
{
    int fd;
    int err;
//    int one = 1;
//    int so1 = sizeof(one);
    int i;
    ssize_t done;
    fd_set rd;
    
    CYG_TEST_INFO( "Thread 2 running" );

    CYG_TEST_INFO( "Thread2: calling socket()");
    fd = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    if( fd < 0 ) SHOW_RESULT( socket, fd );
    CYG_TEST_CHECK( fd >= 0, "socket() returned error");

//    err = setsockopt( fd, SOL_SOCKET, SO_DONTROUTE, (void *)&one, so1);
//    if( err < 0 ) SHOW_RESULT( setsockopt, err );    
//    CYG_TEST_CHECK( err == 0, "setsockopt() returned error");

    CYG_TEST_INFO( "Thread2: calling connect()");
    err = connect( fd, (struct sockaddr *)&sa, sizeof(sa));
    if( err < 0 ) SHOW_RESULT( connect, err );    
    CYG_TEST_CHECK( err == 0, "connect() returned error");

    FD_ZERO( &rd );
    FD_SET( fd, &rd );

    CYG_TEST_INFO( "Thread2: calling select()");
    err = select( fd+1, &rd, NULL, NULL, NULL );
    if( err < 0 ) SHOW_RESULT( select, err );    
    CYG_TEST_CHECK( err >= 0, "select() returned error");    
    CYG_TEST_CHECK( FD_ISSET( fd, &rd ), "Fd not set in select() result");

    CYG_TEST_INFO( "Thread2: calling read()");
    done = read( fd, buf2, TEST_BUFSIZE);
    if( done != TEST_BUFSIZE ) SHOW_RESULT( read, done );
    CYG_TEST_CHECK( done == TEST_BUFSIZE, "read() returned bad size");    

    for( i = 0; i < TEST_BUFSIZE; i++ )
        if( buf1[i] != buf2[i] )
            diag_printf("buf1[%d](%02x) != buf2[%d](%02x)\n",i,buf1[i],i,buf2[i]);

    CYG_TEST_INFO( "Thread2: calling write()");
    done = write( fd, buf2, TEST_BUFSIZE);
    if( done != TEST_BUFSIZE ) SHOW_RESULT( write, done );
    CYG_TEST_CHECK( done == TEST_BUFSIZE, "write() returned bad size");    

    CYG_TEST_INFO( "Thread2: calling close(fd)");
    err = close(fd);
    if( err < 0 ) SHOW_RESULT( close, err );    
    CYG_TEST_CHECK( err == 0, "close() returned error");    
    
    CYG_TEST_INFO( "Thread2: calling pthread_exit()");    
    pthread_exit( arg );
}

//==========================================================================
// main

int main( int argc, char **argv )
{
    struct in_addr ina;
    char *addr1 = "127.0.255.106";
    char *addr2;
    void *retval;
    pthread_attr_t attr;
    struct sched_param schedparam;
    
    sa.sin_family = AF_INET;
    sa.sin_len = sizeof(sa);
    inet_aton("127.0.0.1", &sa.sin_addr);
    sa.sin_port = htons(1234);
    
    CYG_TEST_INIT();

    init_all_network_interfaces();
    
    // Test inet_ntoa() and inet_aton()

    inet_aton(addr1, &ina);
    addr2 = inet_ntoa(ina);
    CYG_TEST_CHECK( strcmp(addr1, addr2) == 0, "Bad inet adderess conversion");


    // Create test threads

    {
        pthread_attr_init( &attr );

        schedparam.sched_priority = 10;
        pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED );
        pthread_attr_setschedpolicy( &attr, SCHED_RR );
        pthread_attr_setschedparam( &attr, &schedparam );
        pthread_attr_setstackaddr( &attr, (void *)&thread1_stack[sizeof(thread1_stack)] );
        pthread_attr_setstacksize( &attr, sizeof(thread1_stack) );

        pthread_create( &thread1,
                        &attr,
                        pthread_entry1,
                        (void *)0x12345671);
    }

    {
        pthread_attr_init( &attr );

        schedparam.sched_priority = 5;
        pthread_attr_setinheritsched( &attr, PTHREAD_EXPLICIT_SCHED );
        pthread_attr_setschedpolicy( &attr, SCHED_RR );
        pthread_attr_setschedparam( &attr, &schedparam );
        pthread_attr_setstackaddr( &attr, (void *)&thread2_stack[sizeof(thread2_stack)] );
        pthread_attr_setstacksize( &attr, sizeof(thread2_stack) );

        pthread_create( &thread2,
                        &attr,
                        pthread_entry2,
                        (void *)0x12345672);
    }
    
    // Now join with thread1
    CYG_TEST_INFO( "Main: calling pthread_join(thread1)");
    pthread_join( thread1, &retval );

    // And thread 2
    CYG_TEST_INFO( "Main: calling pthread_join(thread2)");
    pthread_join( thread2, &retval );

    CYG_TEST_PASS_FINISH("socket");
}

#else

//==========================================================================
// main

int main( int argc, char **argv )
{
    CYG_TEST_INIT();

    CYG_TEST_NA("socket");
}

#endif


// -------------------------------------------------------------------------
// EOF socket.c

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费视频大全| 亚洲欧美偷拍三级| 最新日韩在线视频| 美女视频一区二区| 欧美性色黄大片手机版| 国产精品视频免费| 狠狠色综合色综合网络| 欧美日本在线一区| 国产精品超碰97尤物18| 福利一区在线观看| 精品成人私密视频| 丝袜亚洲另类欧美| 在线欧美一区二区| 亚洲精品美国一| 9色porny自拍视频一区二区| 久久婷婷国产综合精品青草| 日本亚洲一区二区| 欧美美女视频在线观看| 亚洲大片在线观看| 欧美午夜在线一二页| 亚洲资源中文字幕| 在线精品国精品国产尤物884a| 国产精品九色蝌蚪自拍| 国产成人av网站| 久久精品水蜜桃av综合天堂| 国产乱理伦片在线观看夜一区| 日韩一区二区在线免费观看| 视频一区在线视频| 欧美电影免费观看高清完整版在线观看| 亚洲18色成人| 91精品国产品国语在线不卡| 天天亚洲美女在线视频| 欧美剧在线免费观看网站| 日本午夜精品一区二区三区电影 | 国产999精品久久久久久绿帽| 欧美一级高清片| 久久国产三级精品| 亚洲精品一区二区三区精华液 | 色狠狠一区二区| 亚洲尤物视频在线| 制服丝袜亚洲播放| 国产一区二区三区久久久| 久久久久久黄色| 成a人片国产精品| 亚洲欧美日韩精品久久久久| 欧美丝袜自拍制服另类| 日本亚洲一区二区| 欧美激情一区二区三区蜜桃视频| 波波电影院一区二区三区| 亚洲精品成a人| 欧美一区二区三区成人| 国产精品99久久久久久宅男| 亚洲欧美在线视频观看| 欧美美女喷水视频| 国产成都精品91一区二区三| 亚洲一区二区三区四区在线免费观看 | 亚洲精品欧美在线| 欧美精品免费视频| 福利91精品一区二区三区| 亚洲精品日产精品乱码不卡| 91精品蜜臀在线一区尤物| 国产成人av一区二区三区在线| 亚洲精品免费视频| 久久这里只精品最新地址| 色综合久久久久| 看电影不卡的网站| 综合中文字幕亚洲| 日韩视频一区在线观看| 成人v精品蜜桃久久一区| 亚洲v日本v欧美v久久精品| 久久午夜色播影院免费高清| 在线视频国内一区二区| 国产原创一区二区| 亚洲福利一区二区三区| 国产亚洲一区二区三区四区| 欧美午夜视频网站| 懂色av一区二区三区蜜臀 | 丰满少妇久久久久久久| 天堂va蜜桃一区二区三区| 国产精品毛片久久久久久久| 日韩亚洲欧美一区| 色一区在线观看| 豆国产96在线|亚洲| 美国十次综合导航| 亚洲成a人片综合在线| 国产精品国产三级国产| 精品欧美久久久| 制服丝袜中文字幕一区| 日本韩国欧美在线| 成人性视频免费网站| 国产精品一二三在| 激情伊人五月天久久综合| 天天色综合天天| 亚洲影院久久精品| 一区二区三区不卡视频在线观看| 国产三级三级三级精品8ⅰ区| 91精品国产福利| 欧美日韩成人综合| 欧美日韩免费电影| 欧美在线free| 欧美无砖专区一中文字| 91国产免费观看| 色综合久久天天综合网| 成人av在线资源网| 国产69精品久久777的优势| 国产传媒久久文化传媒| 国产精品99久久久久久似苏梦涵 | 久久男人中文字幕资源站| 欧美一区二区精品久久911| 欧美日韩在线播放三区四区| 色综合久久天天| 在线精品观看国产| 欧美日韩激情一区二区三区| 欧美日韩国产综合视频在线观看| 欧美色老头old∨ideo| 欧美日韩一区二区三区四区五区| 在线观看免费视频综合| 在线精品视频一区二区三四| 在线观看av不卡| 欧美顶级少妇做爰| 日韩视频在线一区二区| 久久免费电影网| 日本一区二区三区电影| 中文字幕在线免费不卡| 国产精品电影一区二区三区| 亚洲精品写真福利| 午夜精品久久久| 久久99国产精品尤物| 高清成人在线观看| 欧美自拍丝袜亚洲| 91精品国产综合久久蜜臀| 欧美va亚洲va在线观看蝴蝶网| 久久日一线二线三线suv| 国产精品麻豆久久久| 一卡二卡三卡日韩欧美| 久久99九九99精品| 97久久超碰精品国产| 欧美视频在线播放| 久久亚洲春色中文字幕久久久| 中文字幕一区二区三区在线不卡 | 国产寡妇亲子伦一区二区| 91片黄在线观看| 7777精品伊人久久久大香线蕉的| 欧美精品一区二区久久久| 亚洲天堂av老司机| 日本成人在线不卡视频| 成人看片黄a免费看在线| 欧美日韩国产精品成人| 中文字幕+乱码+中文字幕一区| 夜夜爽夜夜爽精品视频| 国产麻豆精品一区二区| 色哟哟一区二区| 久久九九国产精品| 亚洲第一久久影院| 国产ts人妖一区二区| 欧美精品三级日韩久久| 成人欧美一区二区三区黑人麻豆| 天天射综合影视| 91香蕉国产在线观看软件| 日韩亚洲欧美中文三级| 亚洲欧美国产77777| 国产一区二区女| 在线成人av网站| 亚洲免费在线播放| 国产福利电影一区二区三区| 欧美日韩精品三区| 有码一区二区三区| www.综合网.com| 久久品道一品道久久精品| 日韩有码一区二区三区| 色婷婷综合久久| 国产精品久久久久久一区二区三区| 玖玖九九国产精品| 欧美一区二区在线不卡| 亚洲一区二区三区在线| 99热精品一区二区| 国产日韩欧美a| 国产自产2019最新不卡| 日韩精品在线一区| 美女网站一区二区| 欧美疯狂性受xxxxx喷水图片| 亚洲免费av高清| 成人美女在线观看| 国产日韩欧美制服另类| 国产一二三精品| 国产性色一区二区| 国产成人综合网站| 精品少妇一区二区三区免费观看 | 欧美精品一区二区久久久| 免费成人你懂的| 日韩一级黄色大片| 日韩国产高清影视| 日韩欧美一级二级三级久久久| 亚洲高清一区二区三区| 欧美日韩国产综合草草| 午夜伊人狠狠久久| 91精品国产色综合久久不卡电影| 三级欧美在线一区| 制服丝袜亚洲色图| 精品无人码麻豆乱码1区2区 |