+ if (bind(l, ai->ai_addr, ai->ai_addrlen) < 0)
+ {
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "bind %s", addr);
+ freeaddrinfo(ai);
+ CLOSESOCKET(l);
+ return 1;
+ }
+ freeaddrinfo(ai);
+ if (listen(l, SOMAXCONN) < 0)
+ {
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "listen %s", addr);
+ CLOSESOCKET(l);
+ return 1;
+ }
+
+ if (record_fname)
+ {
+ record_file = fopen(record_fname, "wb");
+ if (!record_file)
+ {
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "fopen %s", record_fname);
+ CLOSESOCKET(l);
+ return 1;
+ }
+ }
+ server->http_server = http_server_create();
+
+ server->http_server->record_file = record_file;
+ server->http_server->listener_socket = l;
+
+ c = iochan_create(l, http_accept, EVENT_INPUT | EVENT_EXCEPT, "http_server");
+ iochan_setdata(c, server);
+
+ iochan_add(server->iochan_man, c);
+ return 0;
+}