Предыдущая | Оглавление | Следующая |
Перевести сокет в режим ожидания соединений
#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() в цикле |
Предыдущая | Оглавление | Следующая |