套接字发送错误
问题描述:
我正在使用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;
}
答
如果设置errno
但电话没有失败(即它没有返回-1),那么errno
的价值是没有关系的,你做的最后一次通话。您可以先尝试清除:
errno = 0;
为了安全起见。我想说的是,你不能知道errno
的价值是相关的,除了设置它的电话之后。您必须检查您所做的所有可能因成功/失败而失败的呼叫。
答
要检测错误,你应该检查发送返回-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
发布导致问题的代码 – 2009-12-10 10:58:51