153:

154:  if (argv[1]) portAddress = argv[1];

155:

156:  memset(&hints, 0, sizeof (hints));

157:

158:  hints.ai_socktype = SOCK_DGRAM;

159:  hints.ai_flags = AI_ADDRCONFIG | AI_PASSIVE;

160:  if ((rc = getaddrinfo(NULL, portAddress, &hints, &addr)))

161:   fprintf(stderr, 'сбой поиска порта %s ',

162:    portAddress);

163:

164:  if ((s = socket(addr->ai_family, addr->ai_socktype,

165:   addr->ai_protocol)) < 0)

166:   die('socket');

167:

168:  if (bind(s, addr->ai_addr, addr->ai_addrlen))

169:   die('bind');

170:

171:  /* Основной цикл состоит из ожидания tftp-запроса, его обработки

172:     и затем ожидания следующего запроса. */

173:  while (1) {

174:   bytes = recvfrom(s, &packet, sizeof(packet), 0, &from,

175:    &fromLen);

176:   if (bytes < 0) die('recvfrom');

177:

178:   /* Если выполнить разветвление перед вызовом handleRequest() и

179:      завершить дочерний процесс после возврата функции, то данный

180:      сервер будет работать точно как параллельный tftp-сервер */

181:   handleRequest(*addr, from, fromLen, packet);

182:  }

183: }

17.7. Ошибки сокетов

Некоторые значения errno встречаются только при работе с сокетами. Ниже приведен список специфических ошибок сокетов вместе с краткими их описаниями.

EADDRINUSE Запрашиваемый адрес уже используется и не может быть переприсвоен.
EADDRNOTAVAIL Запрашивается несуществующий адрес.
EAFNOSUPPORT Указано неподдерживаемое семейство адресов.
ECONNABORTED Соединение прервано программным обеспечением.
ECONNREFUSED Удаленная машина отклонила попытку соединения.
ECONNRESET Соединение переустановлено удаленным концом. Это, как правило, указывает на то, что удаленная машина была перезагружена.
EDESTADDRREQ Выполнена попытка передачи данных через сокет без предоставления адреса назначения. Это может происходить только в дейтаграммных сокетах.
EHOSTDOWN Удаленный хост не находится в сети.
EHOSTUNREACH Удаленный хост недоступен.
EISCONN Для сокета уже установлено соединение.
EMSGSIZE Данные, передаваемые через сокет, слишком велики для отправления в одном элементарном сообщении.
ENETDOWN Сетевое соединение прекратилось.
ENETRESET Сеть была сброшена, что вызвало потерю соединения.
ENETUNREACH Указанная сеть недоступна.
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ОБРАНЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату