藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18


close(sock)返回-1,為何?有源代碼

以下在sco unix下正常,但移到VC6(window)下編譯正常,運行則ret =close(sock)返回為-1;

/*0-成功  -1連接失敗 -2發送失敗 -3接收失敗 -4加密錯 -5解密錯*/
int ds_wdtoqz_cli(unsigned  char *send_buf,unsigned char *recv_buf,char *hostname ,u_short port,int timeout,char *mkey,char *wkey)
{
        int        sock ;
        int        ret ;

    sock = ds_socketClient(hostname, port, 1) ;
    if (sock == 0) {
                GClog_print(__FILE__,__LINE__,"ERROR hostname=[%s],port=[%d]",hostname,port);
        return(-1);
    }

       
        GClog_print(__FILE__, __LINE__, "0send_buf=[%s]",send_buf);
       
        ds_Calc_MAC(mkey,wkey,send_buf) ;

    GClog_print(__FILE__, __LINE__, "1send_buf=[%s]",send_buf);
   
        if( encrypt_ds_buf(send_buf,mkey,wkey)==FAIL )
    {
        GClog_print(__FILE__, __LINE__, "ERROR encrypt_ds_buf()");
                return(-4) ;
    }
       
        GClog_print(__FILE__, __LINE__, "2send_buf=[%s]",send_buf);
   
        //if(ds_SndToSocket(sock, buf,timeout) == 0)
    ret = ds_send(sock,send_buf) ;
    if(ret<=0)
        {
                GClog_print(__FILE__, __LINE__, "ERROR ds_send() ret=[%d]",ret);
        close(sock) ;
        return(-2)  ;
    }

    //ret = ds_RcvFromSocket(sock,buf,timeout);
    ret = ds_recv(sock,recv_buf,timeout) ;
        if(ret <= 0)
        {
                GClog_print(__FILE__, __LINE__,"ERROR ds_recv() ret=[%d]",ret);
        close(sock) ;
        return(-3)  ;
    }
       
        //GClog_print(__FILE__, __LINE__, "111111111");
/*
        if( decrypt_ds_buf(recv_buf,mkey,wkey)==FAIL )
        {
                GClog_print(__FILE__, __LINE__, "ERROR encrypt_ds_buf()");
                return(-5) ;
        }
*/

   
        ret = close(sock) ;
       
        GClog_print(__FILE__, __LINE__, "close ret=[%d]",ret);
   
        return(0) ;

}


/*0-成功  -1連接失敗 -2發送失敗 -3接收失敗 -4加密錯 -5解密錯*/
int ds_wdtoqz_cli(unsigned  char *send_buf,unsigned char *recv_buf,char *hostname ,u_short port,int timeout,char *mkey,char *wkey)
{
        int        sock ;
        int        ret ;

    sock = ds_socketClient(hostname, port, 1) ;
    if (sock == 0) {
        GClog_print(__FILE__,__LINE__,"ERROR hostname=[%s],port=[%d]",hostname,port);
             return(-1);
    }

   
    ret = ds_send(sock,send_buf) ;
    if(ret<=0)
   {
        GClog_print(__FILE__, __LINE__, "ERROR ds_send() ret=[%d]",ret);
        close(sock) ;
        return(-2)  ;
    }

    ret = ds_recv(sock,recv_buf,timeout) ;
    if(ret <= 0)
   {
        GClog_print(__FILE__, __LINE__,"ERROR ds_recv() ret=[%d]",ret);
        close(sock) ;
        return(-3)  ;
    }

   
ret = close(sock) ;
       
GClog_print(__FILE__, __LINE__, "close ret=[%d]",ret);
/*ret為什麼會是-1*/   
return(0) ;

}

close(sock)返回-1,為何?有源代碼

返回-1的原因很多,具體要查勘你的環境手冊。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com