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

  • Автор темы shisik
  • Дата начала
S

shisik

Начинаю изучать сокеты, и сразу же появилась проблема. Простейший код
Код:
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-файле она видна как класс?
 
E

European

<!--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

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

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

shisik

Спасибо. Руки надо поотрывать автору статьи, в которой это было написано (кстати, именно для VC++ написано). Сменил имя, теперь всё нормально...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!