Работа с сокетами

shisik

Well-Known Member
26.08.2007
154
0
29
Харьков
#1
Начинаю изучать сокеты, и сразу же появилась проблема. Простейший код
Код:
WSADATA ws;
WSAStartup(MAKEWORD(1, 1), &ws); 
SOCKET s;
s = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in s_addr;
Вызывает ошибку error C2143: syntax error : missing ';' before '.' на последней строке (точнее, две такие ошибки подряд на одной и той-же строке). Я всего лишь объявил переменную типа sockaddr_in, а он ругается. Даже просто
Код:
#include "winsock2.h"

int main(int argc, char* argv[])
{
sockaddr_in s_addr;

return 0;
}
выдаёт две такие ошибки. Вопрос: почему?
И ещё. Везде написано (и в winsock2.h тоже), что sockaddr_in - структура. Почему в моём cpp-файле она видна как класс?
 
04.09.2006
2 566
2
Минск
#2
<!--QuoteBegin-shisik+1:09:2007, 19:15 -->
<span class="vbquote">(shisik @ 1:09:2007, 19:15 )</span><!--QuoteEBegin-->что sockaddr_in - структура. Почему в моём cpp-файле она видна как класс?
[snapback]77031" rel="nofollow" target="_blank[/snapback]​
[/quote]
Ну структура и класс очень близкие вещи. Их отличия очень подробно рассматривались на форуме.
 
M

mms

Гость
#3
s_addr - неудачное название переменной, т.к. есть такой макрос, который студия и пытается развернуть:

Код:
#define s_addr S_un.S_addr /* can be used for most tcp & ip code */
 

shisik

Well-Known Member
26.08.2007
154
0
29
Харьков
#4
Спасибо. Руки надо поотрывать автору статьи, в которой это было написано (кстати, именно для VC++ написано). Сменил имя, теперь всё нормально...