KNOW INTUIT, Лекция, Sockets
Каквито и страхотни идеи да имате в областта на телекомуникациите, разпределените бази знания или търсачките, можете да ги приложите на практика само като напишете подходящата програма. Основните операционни среди (Unix или Windows) в момента се базират на идеологията на сокета. Тази технология е разработена в университета в Бъркли (САЩ) за системата Unix, така че съединителите (сокетите) понякога се наричат гнезда на Бъркли. Сокетите реализират механизма на взаимодействие не само между партньорите в телекомуникациите, но и процесите в компютъра като цяло (вижте [2.15], а също и http://book.itep.ru/7/sock_71.htm). Socket технологията е в основата на съвременното мрежово програмиране.
Работата със сокети включва няколко етапа: създава се сокет, конфигурира се за даден режим на работа, използва се за организиране на обмен и накрая се елиминира. Socket технологията поддържа работа с всякакви протоколни стекове, комбинирани I / O процедури, използването на голям брой доставчици на услуги (сервизни сървъри), възможност за групиране на сокети, което им позволява да бъдат приоритизирани и много повече. Наборът от оператори, поддържащи интерфейса на доставчика на услуги, образува отделна динамична библиотека.
За общата синхронизация на работата на доставчиците на услуги и приложенията winsock въведе концепцията за обекти на събития. Събитийните обекти служат по-специално за организиране на работата на процесите на обмен на информация, комбинирани във времето. Тук е подходяща бележка относно използването на стандартни номера на портове. При многозадачни, многопотребителски системи се използват стандартни номера на портове при инициализиране на процес. Тъй като множество идентични връзки (например множество едновременни FTP сесии) са разрешени между клиенти сървъра, стандартните номера на портове са незаменими тук. След като всички PsIP на сървъра могат да съответстват на няколко PcIPc на клиента.
s=гнездо (INT AF, INT тип, INT протокол);
където всички параметри са цели числа, AF (address_family) характеризира набора от протоколи, съответстващи на този сокет (може да бъде набор от Internet, Unix, Appletalk и т.н.). За интернет AF може да приема само стойността PF_INET, за Unix PF_UNIX. Аргументът тип указва типа комуникации (SOCK_STREAM, SOCK_RAW и SOCK_DGRAM). Аргументът на протокола указва кода за конкретен протокол от посочения набор (посочен от AF), който ще бъде внедрен в тази връзка. Протоколите се обозначават със символни константи с префикс IPPROTO_ (например IPPROTO_TCP или IPPROTO_UDP). Стойността protocol=0 е разрешена (протоколът не е посочен), в този случай се използва стойността по подразбиране за този тип връзка. Стойностите за AF и тип обикновено могат да бъдат намерени във файла .h> на сокета. Върнатият параметър S е дескриптор на сокет. Опцията SOCK_STREAM показва, че възнамерявате да създадете ориентиран към връзка, двупосочен, надежден комуникационен канал (TCP за Интернет). Комуникацията с друг процес в този случай се установява от оператора за свързване. След като връзката бъде установена, данните могат да бъдат изпратени с оператора за изпращане или получени с оператора recv. Параметърът SOCK_DGRAM указва канал без връзка с пакети с фиксиран размер (например UDP в случай на AF=PF_INET). Такъв канал позволява използването на операторите sendto и recvfrom. Опцията SOCK_RAW дефинира трети режим, който позволява да се използват протоколи от по-нисък слой като ICMP или дори IP. По този начин формирането на сокет е създаването на структура от данни, която го описва.
Ако операцията на сокета е успешна, s е равно на манипулатора на сокета, в противен случай s=INVALID_SOCKET (1) . Можете да използвате командата WSAGetLastError, за да получите код за грешка, който обяснява причината за грешката.
Дескриптор на сокет сочи към записа в таблицата с дескриптори, съответстващ на дадения сокет. Инструкцията за сокет разпределя място в тази таблица. Елемент от такава таблица изглежда така: