套接字发送错误

时间:2009-12-10 10:57:01

标签: c++ linux sockets

我正在使用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;
}

2 个答案:

答案 0 :(得分:1)

如果设置了errno但是调用没有失败(即它没有返回-1),那么errno的值与你上次调用没有关系。您可以先尝试清除:

errno = 0;

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

答案 1 :(得分:0)

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

假设你从send()得到-1,那么错误代码将在errno中。没有必要使用getsockopt来检索它。

没有错误代码196,因此我对您的错误处理非常怀疑。

此外,如果send()失败,您可能不应该关闭套接字。你没有指定地址族或套接字类型,但我分别假设AF_INET和SOCK_DGRAM(即UDP)