<ul id="o4jpt"></ul>
  • 設(shè)為首頁(yè) | 加入收藏 | 中文 | English
     
    產(chǎn)品搜索:
     
    網(wǎng)站首頁(yè)     ZLIP介紹   SDK開發(fā)板   ZLIP功能  ZLWeb功能 串口服務(wù)器   版權(quán)信息     購(gòu)買方法  友情鏈接
    ZLIP功能  ZLIP function
     
     API接口  API Interface 您現(xiàn)在的位置→ZLIP功能  

    API接口包括:ZLIP初始化函數(shù)、ZLIP退出函數(shù)、Socket接口函數(shù)、其它API函數(shù)等。    


    ZLIP_Init

    初始化ZLIP,在使用ZLIP前必須調(diào)用該函數(shù)。函數(shù)原形:

    zl_bool ZLIP_Init(
    struct zlip_addr_info DT_XDATA *addr_info
    );


    參數(shù)
        addr_info
            [in] 初始化所需的地址信息。
    返回值:
        TRUE/ FALSE。表示初始化成功/不成功。在51系統(tǒng)上初始化都會(huì)成功。

    ZLIP_Release

    退出ZLIP,使用該函數(shù)停止ZLIP的運(yùn)轉(zhuǎn)。函數(shù)原形:

    void ZLIP_Release(
    );


    Socket接口

    ZLIP實(shí)現(xiàn)了BSD socket的socket, sendto, recvfro, connect, bind, listen, accept, send, recv, closesocket, shutdown, getpeername, getsockname, htonl, htons, ntohl, ntohs, inet_addr,inet_ntoa,ioctlsocket,setsockopt, getsockopt,select共23個(gè)接口函數(shù)。

    下面僅舉select函數(shù)的API這一例子:

    select

    select函數(shù)用于獲取一個(gè)或多個(gè)socket的狀態(tài),如果沒(méi)有任何一個(gè)指定的socket處于指定的狀態(tài),則函數(shù)處于阻塞狀態(tài),直到有一個(gè)socket處于指定的狀態(tài)后返回。

    int select(
        int nfds,
        fd_set FAR *readfds,
        fd_set FAR *writefds,
        fd_set FAR *exceptfds,
        const struct timeval FAR *timeout
    );

    參數(shù)
        nfds
            [in] 該參數(shù)是為兼容linux socket而設(shè)計(jì),這里不使用。
        readfds
            [in/out] readfds 指向fd_set類型的結(jié)構(gòu),每個(gè)fd_set結(jié)構(gòu)體內(nèi)含有多個(gè)套接字。Readfds中包含的套接字是要進(jìn)行可
            讀性檢測(cè)的套接字。函數(shù)返回的時(shí)候Readfds中包含處于可讀狀態(tài)的套接字。NULL表示select不進(jìn)行可讀性檢測(cè)。
        writefds
            [in/out] writefds中包含的套接字是要進(jìn)行可寫性檢測(cè)的套接字。函數(shù)返回的時(shí)候writefds中包含處于可寫狀態(tài)的套
            接字。NULL表示select不進(jìn)行可寫性檢測(cè)。
        exceptfds
            [in/out] exceptfds中包含的套接字是要進(jìn)行異常檢測(cè)的套接字。函數(shù)返回的時(shí)候exceptfds中包含處于異常狀態(tài)的套
            接字。 NULL表示select不進(jìn)行異常檢測(cè)。
        timeout
            [in] 最長(zhǎng)等待時(shí)間,如果為NULL,則為永久等待,直到有一個(gè)socket符合指定的要求。timeout內(nèi)容是不會(huì)在函數(shù)中修
            改的。如果timeout中的值為0,則相當(dāng)于非阻塞方式的檢測(cè)。
    返回值: 返回所有準(zhǔn)備好的fd_set中的socket的個(gè)數(shù)總和,返回0表示等待超時(shí)。


    描述

    可讀性:可讀性是指如下情況:
    (1) 如果該socket調(diào)用過(guò)listen(),可讀時(shí)表示有連接等待接受,可使用accpet 從該socket接受連接。使用select()進(jìn)行accept檢測(cè)的參考例子如下:

    zl_s32 s32tmp;
    struct timeval t;
    fd_set r;
    struct sockaddr_in DT_XDATA dest_addr, dest_addr_get;
    dest_addr_get.sin_addr = IPAddr;
    dest_addr_get.sin_port = 1024;

    /* readable when can accept */
    s = socket(PF_INET, SOCK_STREAM, 0);
    bind(s,&dest_addr_get, sizeof(struct sockaddr_in));
    listen(s,5);
    printf("\nwait for connection...");
    FD_ZERO(&r);
    FD_SET(s, &r);
    t.tv_sec = 10;
    t.tv_usec = 100;
    if(select(0, &r, NULL, NULL, &t) != 0)
    {
        if(FD_ISSET(s, &r))
        printf("\n is acceptable");
        s32tmp = sizeof(struct sockaddr_in);
        if((ss[0] = accept(s, &dest_addr, &s32tmp)) != SOCK_ERR)
        {
            printf("\naccept from %s, port %d", inet_ntoa(&dest_addr), dest_addr.sin_port);
        }
        else
        {
            FIND_ERROR;
        }
        }
        else
        {
            printf("no connection in %d s",t.tv_sec);
        }
    socketclose(s);


    (2) 當(dāng)檢測(cè)到s可讀時(shí),即使在阻塞模式下,s也可以調(diào)用recv()或recvfrom()而不阻塞。
    (3) 當(dāng)連接被closed、reset的時(shí)候也是可讀的。為了和(2)進(jìn)行區(qū)別可以通過(guò)調(diào)用recv來(lái)檢查(當(dāng)可讀時(shí),用recv()或recvfrom()返回0表明是情況(3))。

    可寫性:
    (1) 表示調(diào)用connect后,連接已經(jīng)建立,可以發(fā)送數(shù)據(jù)了,所以select可以用于非阻塞狀態(tài)的connect函數(shù)是否成功建立連接的檢測(cè)。
    (2) 表示發(fā)送緩存還有空余并且對(duì)方接收緩沖區(qū)不為0,可以發(fā)送數(shù)據(jù)。

    異常:
    當(dāng)TCP發(fā)生connect()連接失敗、對(duì)方發(fā)送RST、對(duì)方中斷連接等錯(cuò)誤是人為發(fā)生了異常。
    當(dāng)selcet返回的時(shí)候,readfds 、writefds 、exceptfds 中沒(méi)有準(zhǔn)備好的fd將被刪除。關(guān)于fd_set有如下定義:
    (1) FD_SETSIZE:這個(gè)宏定義表示fd_set中的socket的最大數(shù)量,例如64。
    (2) FD_CLR(s, *set):從set中將s刪除。在使用fd_set之前應(yīng)該先清空。
    (3) FD_ISSET(s, *set):s是否存在于set中。
    (4) FD_SET(s, *set):將s加入set中。
    (5) FD_ZERO(*set):將set清空。

       
     
       滬ICP備11004689號(hào)   版權(quán)所有@上海卓嵐信息科技有限公司   Design by infoo.cn  

    <ul id="o4jpt"></ul>
  • 欧美丰满少妇人妻精品 | 亚洲欧洲在线aa观看视频 | 天天综合7799精品视频 | 在线观看黄片网站 | www黄网站 | 人妻AⅤ在线| 成人在线导航 | 中文字幕一区视频 | 嫩逼网站| 国产xx视频 |