2009-12-10 132 views
0

我正在使用unix套接字。当缓冲区发送到套接字,它给了我未知的错误196. 请帮助这一点。套接字发送错误

BOOL SendData(int iBuffer) 
{ 
    //Send data over socket 
    int nRet = send(m_listenSock, m_cBuffer, iBuffer, 0); 

    if(SOCKET_ERROR > nRet) 
    { 
     //log the error char temp; 
     int length= sizeof(int); 
     int rc = getsockopt(m_listenSock,SOL_SOCKET,SO_ERROR,&temp,(socklen_t *)&length); 

     //if(rc == 0) 
     { 
      errno = temp; 
      perror("\nError is"); 
     } 

#ifndef LINUX 
     WSACleanup(); 
#else 
     close(m_listenSock); 
#endif 

     printf("\nSend data failed to"); 

     return FALSE; 
    } 

    return TRUE; 
} 
+1

发布导致问题的代码 – 2009-12-10 10:58:51

回答

1

如果设置errno但电话没有失败(即它没有返回-1),那么errno的价值是没有关系的,你做的最后一次通话。您可以先尝试清除:

errno = 0; 

为了安全起见。我想说的是,你不能知道errno的价值是相关的,除了设置它的电话之后。您必须检查您所做的所有可能因成功/失败而失败的呼叫。

0

要检测错误,你应该检查发送返回-1。我不知道SOCKET_ERROR是什么,但是如果它是-1,那么上面的代码将无法正常工作。

假设你得到-1从发送(),然后错误代码将是错误号。没有必要做一个getsockopt来检索它。

没有错误代码196,所以我会深深怀疑你的错误处理。

另外,如果send()失败,则应该不关闭套接字。您没有指定地址系列或套接字类型,但我假设分别为AF_INET和SOCK_DGRAM(即UDP)

+0

SOCKET_ERROR == -1 = true – connorbode 2014-01-29 23:13:04