закрывающиеся розетки на linux и windows - PullRequest
1 голос
/ 24 мая 2010

gcc 4.4.4 c89 Visual Studio VC ++ 2008

Я пишу кроссплатформенное клиент-серверное приложение. Он будет работать как на 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 Ответ

3 голосов
/ 24 мая 2010

Ну, для одного вам нужно использовать closesocket в Windows, а не close.

Что касается обработки ошибки, посмотрите возможные коды ошибок и решите, какие из них вы хотите обработать: http://msdn.microsoft.com/en-us/library/ms737582(VS.85).aspx

«Перед использованием этой функции должен произойти успешный вызов WSAStartup», вероятно, означает ошибку в вашем приложении, а не то, что вы можете устранить на лету, поэтому хорошая регистрация - хорошая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...