socket () возвращает экстремально большое целое значение - PullRequest
0 голосов
/ 08 ноября 2019

Я работаю на FTP-клиенте. Я пытался применить идентификатор сокета для подключения к серверу. Вот мой код. Многие переменные объявлены внутри класса.

    int Client::connectServer() {

        int ret = 0;
        controlSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
        if(controlSocket < 0 )
        {
            cout<<"Creating Control Socket Failed";
            cout<<"err="<<strerror(errno);
            system("pause");
            return -1;
        }

        serverAddr.sin_family=AF_INET;
        serverAddr.sin_addr.s_addr=inet_addr(ip_addr.c_str());
        serverAddr.sin_port=htons(PORT);  
        memset(serverAddr.sin_zero,0,sizeof(serverAddr.sin_zero));

        ret=::connect(controlSocket,(struct sockaddr*)&serverAddr,sizeof(serverAddr));
        if(ret < 0)
        {
            cout<<"Control Socket Connecting Failed";
            cout<<"err="<<strerror(errno);
            system("pause");
            return -1;
        }
    }

Я вызывал эту функцию дважды, используя почти один и тот же код. Но один из них не работал (не удалось подключиться). Затем я использовал тот же IP-адрес для отладки. Результат показывает, что каждая вещь одинакова, но значение controlSocket.

Когда controlScoket не было инициализировано, оно оценивается 3131961357. Тогда это значение 4294967295 после controlSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);. Я думаю, что это больше, чем максимальные дескрипторы файлов? Однако errno - это 0. С другой стороны, нормальное значение 1932.

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