2010-05-24 158 views
1

GCC 4.4.4的C89 的Visual Studio VC++ 2008關閉套接字和Windows

我寫一個跨平臺的客戶端服務器應用程序。它將在Linux和Windows上運行。

但是,我只是想知道我關閉套接字所做的事是正確的。我關閉文件描述符。但是,如果關閉它有問題。處理這個問題的最好方法是什麼?也許有些數據仍在發送或接收?

非常感謝任何建議,

if(close(sockfd) == -1) 
    { 
#if defined (_WIN32) 
     fprintf(stderr, "[ %d ] [ %s ] [ %s ] [ %d ]\n", 
      WSAGetLastError(), strerror(errno), __func__, __LINE__); 
#elif(__linux__) 
    fprintf(stderr, "[ %s ] [ %s ] [ %d ]\n", strerror(errno), __func__, __LINE__); 
#endif 
    return CS_FAILURE; 
    } 
+1

Microsoft有正確的方法來乾淨地關閉套接字文檔:http://msdn.microsoft.com/en-us/library/ms738547.aspx。你也許可以把它轉換成可以在Linux上運行的東西。 – 2010-05-24 19:32:52

回答

3

那麼,對於一個需要在Windows上,不使用接近關閉套接字。

在處理錯誤,你看在可能的錯誤代碼,並決定要處理的其中哪些:http://msdn.microsoft.com/en-us/library/ms737582(VS.85).aspx

「成功地調用WSAStartup調用使用該功能之前,必須進行」可能意味着在一個錯誤的應用程序,而不是您可以即時處理的事情,所以良好的日誌記錄是一個好主意。

+0

我忘了添加windows的closesocket。剛剛在linux上編譯完成。謝謝。 – ant2009 2010-05-24 16:18:48