Функция connect () возвращает ноль независимо от того, удалось ли подключиться или нет - PullRequest
3 голосов
/ 23 января 2011

Когда я использую функцию connect() на компьютере i7, он всегда возвращает ноль независимо от того, удалось ли ему подключиться или нет.У меня просто нет другого приложения для подключения, и оно все равно возвращает ноль (адрес сервера 127.0.0.1).

Когда я запускаю одно и то же приложение на другом компьютере, оно ведет себя правильно.Итак, в чем может быть проблема?

Спасибо.

Редактировать Move from Answer ниже.

Код

struct hostent* pHostEntry;

pHostEntry = gethostbyname(host);

if(pHostEntry == NULL)
{
    return 0;
}

struct in_addr* host_addr = (struct in_addr*) * pHostEntry->h_addr_list;

if(host_addr == NULL)
{
    return 0;
}

long sockfd;

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
    return 0;
}

memset((char*) &serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr  = *host_addr;
serv_addr.sin_port   = htons(port);

if(connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == SOCKET_ERROR)
{
    CloseSocket();
    sockfd = -1;
    return 0;
}

Вот оно.Здесь у меня всегда ноль.Я, конечно, проверил, слушает ли другое приложение тот же порт.Там нет никого.Более того, если бы он был у меня, я бы не смог работать, если мой сервер включен.Но когда мой сервер включен, у меня нет никаких конфликтов.i7 -> Intel (R (Core) i7 CPU 930 @ 2,80 ГГц 2,80 ГГц. Сейчас я использую этот код некоторое время. У меня есть несколько компьютеров с разными ОС и чипами.проблема. Мне просто интересно, если кто-то сталкивался с той же проблемой. Спасибо

Ответы [ 2 ]

0 голосов
/ 07 мая 2011

Эта строка неверна:

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

В Unix это работает, потому что допустимые файловые дескрипторы, как правило, представляют собой небольшие неотрицательные числа. Но согласно документации для socket, -1 является единственным кодом возврата ошибки. Другие отрицательные числа не являются ошибками.

Теперь вы пытаетесь запустить этот код в Windows, и предположение, что дескрипторы представляют собой небольшие неотрицательные числа, разрывается.

Документация Windows очень понятна. socket возвращает INVALID_SOCKET в случае ошибки, все остальные значения указывают на успех.

0 голосов
/ 07 мая 2011

Вполне возможно, что Windows 7 возвращает IP6-адрес для удаленного сервера.Я предлагаю вам проверить значение pHostEntry->h_addrtype.

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