Это архив сайта coldflame.by.ru, он не обновлялся с 2007 года. Мой современный сайт тут: http://leonid.shevtsov.me.
Домой! Обо мне Специально для РИ-06-1 Разнообразное... барахло, короче :) Программы и прочее Статьи и переводы Блог SmartDaemon
Предыдущая ОглавлениеСледующая

connect()

Соединить сокет с сервером

Прототип

#include <sys/types.h>
#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *serv_addr,
            socklen_t addrlen);

Описание

Когда ты создал дескриптор сокета с помощью socket(), ты можешь соединить его с удаленным сервером используя connect(). Все, что тебе нужно, это передать ей дескриптор и адрес сервера. (Да, и длину адреса, которая тоже передается в подобные функции.)

Если ты еще не вызвал bind() для этого сокета, он автоматичеаки привязывается к твоему IP-адресу на произвольный порт. Как правило, этого достаточно, так как для соединения неважно, какой локальный порт используется. Можно и вызвать bind(), если хочешь привязать клиента к определенному IP и порту, но это случается довольно редко.

Когда connect() выполнен, можно передавать и принимать данные сколько душе угодно.

Важно: если ты вызовешь connect() для сокета SOCK_DGRAM (UDP), то сможешь использовать функции send() и recv() в добавок к обычным sendto() и recvfrom(). Если это нужно.

Возвращаемое значение

Возвращает ноль при успехе, -1 при ошибке, и сохраняет ее номер в errno.

Пример

int s;
struct sockaddr_in serv_addr;

// пусть сервер с адресом 63.161.169.137 слушает на порте 80:

myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(80);
inet_aton("63.161.169.137", &myaddr.sin_addr.s_addr);

s = socket(PF_INET, SOCK_STREAM, 0);
connect(s, (struct sockaddr*)myaddr, sizeof(myaddr));

// теперь можно вызывать send() и recv()

См. также

socket(), bind()


Предыдущая ОглавлениеСледующая