| 989 | } |
| 990 | |
| 991 | static void |
| 992 | start_socket(int url_num, int cnum, struct timeval *nowP) |
| 993 | { |
| 994 | ClientData client_data; |
| 995 | int flags; |
| 996 | int sip_num; |
| 997 | int reusable = connections[cnum].reusable; |
| 998 | |
| 999 | /* Start filling in the connection slot. */ |
| 1000 | connections[cnum].url_num = url_num; |
| 1001 | connections[cnum].started_at = *nowP; |
| 1002 | client_data.i = cnum; |
| 1003 | connections[cnum].did_connect = 0; |
| 1004 | connections[cnum].did_response = 0; |
| 1005 | connections[cnum].idle_timer = tmr_create(nowP, idle_connection, client_data, idle_secs * 1000L, 0); |
| 1006 | connections[cnum].wakeup_timer = (Timer *)0; |
| 1007 | connections[cnum].content_length = -1; |
| 1008 | connections[cnum].bytes = 0; |
| 1009 | connections[cnum].checksum = 0; |
| 1010 | connections[cnum].http_status = -1; |
| 1011 | connections[cnum].reusable = 0; |
| 1012 | connections[cnum].chunked = 0; |
| 1013 | connections[cnum].unique_id = 0; |
| 1014 | |
| 1015 | // set unique id |
| 1016 | if (unique_id == 1 && urls[url_num].unique_id_offset > 0) { |
| 1017 | char buffer[10]; |
| 1018 | snprintf(buffer, 10, "%09u", ++unique_id_counter); |
| 1019 | // fprintf(stderr, "%s %s\n", buffer, &urls[url_num].buf[unique_id_offset]); |
| 1020 | memcpy((void *)&urls[url_num].buf[urls[url_num].unique_id_offset], (void *)buffer, 9); |
| 1021 | connections[cnum].unique_id = unique_id_counter; |
| 1022 | } |
| 1023 | |
| 1024 | /* Make a socket. */ |
| 1025 | if (!reusable) { |
| 1026 | struct epoll_event ev; |
| 1027 | |
| 1028 | connections[cnum].keep_alive = keep_alive; |
| 1029 | connections[cnum].conn_fd = socket(urls[url_num].sock_family, urls[url_num].sock_type, urls[url_num].sock_protocol); |
| 1030 | if (connections[cnum].conn_fd < 0) { |
| 1031 | perror(urls[url_num].url_str); |
| 1032 | return; |
| 1033 | } |
| 1034 | connections[cnum].stats.connections++; |
| 1035 | |
| 1036 | /* Set the file descriptor to no-delay mode. */ |
| 1037 | flags = fcntl(connections[cnum].conn_fd, F_GETFL, 0); |
| 1038 | if (flags == -1) { |
| 1039 | perror(urls[url_num].url_str); |
| 1040 | (void)close(connections[cnum].conn_fd); |
| 1041 | return; |
| 1042 | } |
| 1043 | if (fcntl(connections[cnum].conn_fd, F_SETFL, flags | O_NDELAY) < 0) { |
| 1044 | perror(urls[url_num].url_str); |
| 1045 | (void)close(connections[cnum].conn_fd); |
| 1046 | return; |
| 1047 | } |
| 1048 |
no test coverage detected