src/server/daemon/httplistener.c

changeset 398
83234bc3bee9
parent 396
77d81f2bb9f7
child 415
d938228c382e
equal deleted inserted replaced
397:f202a655f4c2 398:83234bc3bee9
308 308
309 if((listener->server_socket6 = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP)) == -1) { 309 if((listener->server_socket6 = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP)) == -1) {
310 perror("Error: http_listener_new: socket v6"); 310 perror("Error: http_listener_new: socket v6");
311 return NULL; 311 return NULL;
312 } 312 }
313 313
314 int o = 1; 314 int o = 1;
315 setsockopt( 315 setsockopt(
316 listener->server_socket, 316 listener->server_socket,
317 SOL_SOCKET, SO_REUSEADDR, 317 SOL_SOCKET, SO_REUSEADDR,
318 &o, 318 &o,
321 setsockopt( 321 setsockopt(
322 listener->server_socket6, 322 listener->server_socket6,
323 SOL_SOCKET, SO_REUSEADDR, 323 SOL_SOCKET, SO_REUSEADDR,
324 &o, 324 &o,
325 sizeof(int)); 325 sizeof(int));
326
327 #ifdef LINUX
328 o = 1;
329 setsockopt(
330 listener->server_socket6,
331 IPPROTO_IPV6,
332 IPV6_V6ONLY,
333 &o,
334 sizeof(int));
335 #endif
326 336
327 /* bind server socket to address */ 337 /* bind server socket to address */
328 if(bind(listener->server_socket, (struct sockaddr*)&servaddr, sizeof(servaddr))){ 338 if(bind(listener->server_socket, (struct sockaddr*)&servaddr, sizeof(servaddr))){
329 log_ereport(LOG_FAILURE, "http_listener_new: bind failed. Port: %d", conf->port); 339 log_ereport(LOG_FAILURE, "http_listener_new: bind failed. Port: %d", conf->port);
330 return NULL; 340 return NULL;
352 return 0; 362 return 0;
353 } 363 }
354 log_ereport(LOG_INFORM, "start listener on port %d", listener->port); 364 log_ereport(LOG_INFORM, "start listener on port %d", listener->port);
355 365
356 if (listen(listener->server_socket, 256) == -1) { 366 if (listen(listener->server_socket, 256) == -1) {
357 log_ereport(LOG_FAILURE, "http_listener_start: listen failed"); 367 log_ereport(LOG_FAILURE, "http_listener_start: listen failed: %s", strerror(errno));
358 return -1; 368 return -1;
359 } 369 }
360 if (listen(listener->server_socket6, 256) == -1) { 370 if (listen(listener->server_socket6, 256) == -1) {
361 log_ereport(LOG_FAILURE, "http_listener_start: listen failed"); 371 log_ereport(LOG_FAILURE, "http_listener_start: listen v6 failed: %s", strerror(errno));
362 return -1; 372 return -1;
363 } 373 }
364 374
365 /* start acceptor threads */ 375 /* start acceptor threads */
366 for (int i=0;i<listener->nacceptors;i++) { 376 for (int i=0;i<listener->nacceptors;i++) {

mercurial