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);
Проблема с сокетами
Возникает ошибка 10093 при вызове любой функции из сокетов. Порыл в интернете, эта ошибка означает, что либо был сбой в WSAStartup, либо он просто не вызван, либо программа пытается получить доступ к чужому сокету. Что делать? Почитал в интернете, написано: переустановите TCP/IP протокол и т.д., но мне как разработчику это вообще я так понял не поможет, т.к. советы эти для пользователей. Что делать? Что делаю не так? Т.к. броузеры и другие приложения в то же время работают нормально, а моя прога отказывается что либо делать
Цитата: polaroid
Возникает ошибка 10093 при вызове любой функции из сокетов. Порыл в интернете, эта ошибка означает, что либо был сбой в WSAStartup, либо он просто не вызван, либо программа пытается получить доступ к чужому сокету. Что делать? Почитал в интернете, написано: переустановите TCP/IP протокол и т.д., но мне как разработчику это вообще я так понял не поможет, т.к. советы эти для пользователей. Что делать? Что делаю не так? Т.к. броузеры и другие приложения в то же время работают нормально, а моя прога отказывается что либо делать
Фрагмент кода.
Код:
Это сначала. Потом вызываю поток и в потоке использую 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);
... и т.д
{
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);
... и т.д
Дает сбои постоянно. Вот например сейчас программа работает, до этого не работала. Что это?
Цитата:
Код:
sin_remote.sin_port = htons(80);
Возможно, 80й порт занят
80 порт не может быть занят, поскольку это клиентское приложение. Проблема при создании сокета функцией socket насколько я понял. А также при вызове getsockopt и других функций (таких как send)
Цитата: polaroid
Дает сбои постоянно. Вот например сейчас программа работает, до этого не работала. Что это?
Чаще всего неинициализированные переменные, я вижу есть у вас склонность.. :)