|
藍森林 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的原因很多,具體要查勘你的環境手冊。 |
| |