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

listen()

Перевести сокет в режим ожидания соединений

Прототип

#include <sys/socket.h>

int listen(int s, int backlog);

Описание

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

Суть параметра backlog может слегка отличаться на разных системах, но грубо говоря это количество ожидающих соединений, после которого ОС начинает их отклонять. Так что нужно быстро вызывать accept(), чтобы этого не происходило. Установи его в 10, а если клиенты будут часто получать "Connection refused", установи его повыше.

Перед вызовом listen(), сервер должен вызвать bind() и привязать сокет к конкретному порту. На этот порт будут соединяться клиенты.

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

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

Пример

int s;
struct sockaddr_in myaddr;

myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(3490); // клиенты будут соединяться на этот порт
myaddr.sin_addr.s_addr = INADDR_ANY; // автоматический выбор адреса

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

listen(s, 10); // s будет сервером (т.е. ждать соединения)

// а потом вызывать accept() в цикле

См. также

accept(), bind(), socket()


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