Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с сокетами

7.2K
04 августа 2008 года
polaroid
94 / / 05.07.2008
Возникает ошибка 10093 при вызове любой функции из сокетов. Порыл в интернете, эта ошибка означает, что либо был сбой в WSAStartup, либо он просто не вызван, либо программа пытается получить доступ к чужому сокету. Что делать? Почитал в интернете, написано: переустановите TCP/IP протокол и т.д., но мне как разработчику это вообще я так понял не поможет, т.к. советы эти для пользователей. Что делать? Что делаю не так? Т.к. броузеры и другие приложения в то же время работают нормально, а моя прога отказывается что либо делать
4.3K
04 августа 2008 года
flat
142 / / 27.12.2005
Цитата: polaroid
Возникает ошибка 10093 при вызове любой функции из сокетов. Порыл в интернете, эта ошибка означает, что либо был сбой в WSAStartup, либо он просто не вызван, либо программа пытается получить доступ к чужому сокету. Что делать? Почитал в интернете, написано: переустановите TCP/IP протокол и т.д., но мне как разработчику это вообще я так понял не поможет, т.к. советы эти для пользователей. Что делать? Что делаю не так? Т.к. броузеры и другие приложения в то же время работают нормально, а моя прога отказывается что либо делать


Фрагмент кода.

7.2K
04 августа 2008 года
polaroid
94 / / 05.07.2008
 
Код:
wsaerr = WSAStartup(MAKEWORD(2,0), &wsdata);
if (wsaerr != 0)
    error(8);

if ((he = gethostbyname(host)))
    sin_remote.sin_addr.S_un.S_addr = *(DWORD* ) he->h_addr_list[0];
else
    sin_remote.sin_addr.S_un.S_addr = inet_addr(host);
sin_remote.sin_family = AF_INET;
sin_remote.sin_port = htons(80);


Это сначала. Потом вызываю поток и в потоке использую getsockopt:

Код:
DWORD WINAPI thread(void *argv)
{
    SOCKET s = 0;
    int rcv_size, snd_size, sz = sizeof(int);
    long ptr = 0, bytesRead = 0, p_size = MAX_BUF;

    int cnt = 0;
    char number[10];
    char *query_str;
    char *recv_str, *send_str, *szPage, *tmp;

    int exp_count = 0;
    int ovector[VECT_SIZE];
    char substring[MAX_STR];
    int matches = 0;

    int i = 0,j = 0;

    s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    printf("Call socket(), Last error: %d\n", GetLastError());

    getsockopt(s, SOL_SOCKET, SO_SNDBUF, (char*)&snd_size, &sz);
    printf("Last error: %d", GetLastError());
    if ((send_str = (char*)malloc(snd_size)) == NULL)
        error(10);

    getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char*)&rcv_size, &sz);
    printf("Last error: %d", GetLastError());
    if ((recv_str = (char*)malloc(rcv_size)) == NULL)
        error(10);

    closesocket(s);
... и т.д


Дает сбои постоянно. Вот например сейчас программа работает, до этого не работала. Что это?
4.3K
04 августа 2008 года
flat
142 / / 27.12.2005
Цитата:

 
Код:
sin_remote.sin_port = htons(80);


Возможно, 80й порт занят

7.2K
04 августа 2008 года
polaroid
94 / / 05.07.2008
80 порт не может быть занят, поскольку это клиентское приложение. Проблема при создании сокета функцией socket насколько я понял. А также при вызове getsockopt и других функций (таких как send)
14
18 августа 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: polaroid
Дает сбои постоянно. Вот например сейчас программа работает, до этого не работала. Что это?



Чаще всего неинициализированные переменные, я вижу есть у вас склонность.. :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог