2010-01-04 63 views
1

我正在C/C++(混合)中的Linux機器上開發專用遊戲服務器。我有下面的代碼片段:Odd socket()錯誤 - 返回-1,但errno = ERROR_SUCCESS

int sockfd=socket(AI_INET, SOCK_DGRAM, 0); 
if(sockfd==-1) 
{ 
    int err=errno; 
    fprintf(stderr,"%s",strerror(err)); 
    exit(1); 
} 

我的問題就在這裏,是插座返回-1(意味着失敗),目前正在印刷錯誤字符串,但它是「成功」(ERROR_SUCCESS)。

其他說明:

  • 我請求插座> 1024的端口上(斷章取義,但以爲我會提到)
  • 我執行應用程序以超級用戶
+0

您是從您的應用程序剪切/粘貼代碼還是重新鍵入?如果這是一個重新類型,我會檢查你的代碼是否有(比較)if和not =(賦值)。 – 2010-01-04 14:50:00

+0

這是'=='好嗎... – aviraldg 2010-01-04 14:50:37

+0

errno的價值是什麼? – 2010-01-04 14:56:45

回答

11

我覺得非常愚蠢。仔細查看我的代碼,在我的開發計算機上顯示:

if(sockfd==-1); 
... 
+5

你不是第一個這樣做,你也不會是最後一個:-) – moritz 2010-01-04 15:05:07

+1

這正是爲什麼ERROR_SUCCESS存在。 :-) – 2010-01-04 15:08:27

+0

aviraldg,你可能想接受你自己的答案,所以問題看起來像解決了。 – 2010-01-04 17:10:23

1

你有多個線程在運行嗎?他們可能會覆蓋錯誤值。

您遺漏了socket()和if()之間是否存在任何代碼行?另一個函數調用可能會覆蓋errno。

+2

'errno'是C標準的線程本地 – qrdl 2010-01-04 14:58:19

+1

C標準沒有線程的概念。雖然posix要求它是線程局部的。 – nos 2010-01-04 16:23:29

相關問題