2009-12-10 135 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