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