コード例 #1
0
ファイル: fg_socket.c プロジェクト: chenbk85/flowgrind
int set_window_size(int fd, int window)
{
	int send, receive;

	if (window <= 0)
		{ DEBUG_MSG(LOG_NOTICE, "Getting window size of fd %d", fd); }
	else
		{ DEBUG_MSG(LOG_NOTICE, "Setting window size of fd %d to %d", fd, window); }

	send = set_window_size_directed(fd, window, SO_SNDBUF);
	receive = set_window_size_directed(fd, window, SO_RCVBUF);
	return send < receive? send: receive;
}
コード例 #2
0
ファイル: source.c プロジェクト: kramudhan/flowgrind
static int name2socket(struct _flow *flow, char *server_name, unsigned port, struct sockaddr **saptr,
                       socklen_t *lenp, char do_connect,
                       const int read_buffer_size_req, int *read_buffer_size,
                       const int send_buffer_size_req, int *send_buffer_size)
{
    int fd, n;
    struct addrinfo hints, *res, *ressave;
    struct sockaddr_in *tempv4;
    struct sockaddr_in6 *tempv6;
    char service[7];

    bzero(&hints, sizeof(struct addrinfo));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;

    snprintf(service, sizeof(service), "%u", port);

    if ((n = getaddrinfo(server_name, service, &hints, &res)) != 0) {
        flow_error(flow, "getaddrinfo() failed: %s",
                   gai_strerror(n));
        return -1;
    }
    ressave = res;

    do {
        int rc;

        fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
        if (fd < 0)
            continue;

        if (send_buffer_size)
            *send_buffer_size = set_window_size_directed(fd, send_buffer_size_req, SO_SNDBUF);
        if (read_buffer_size)
            *read_buffer_size = set_window_size_directed(fd, read_buffer_size_req, SO_RCVBUF);

        if (!do_connect)
            break;

        rc = connect(fd, res->ai_addr, res->ai_addrlen);
        if (rc == 0) {
            if (res->ai_family == PF_INET) {
                tempv4 = (struct sockaddr_in *) res->ai_addr;
                strncpy(server_name, inet_ntoa(tempv4->sin_addr), 256);
                server_name[255] = 0;
            }
            else if (res->ai_family == PF_INET6) {
                tempv6 = (struct sockaddr_in6 *) res->ai_addr;
                inet_ntop(AF_INET6, &tempv6->sin6_addr, server_name, 256);
            }
            break;
        }

        warn("failed to connect to '%s:%d' ", server_name, port);
        close(fd);
    } while ((res = res->ai_next) != NULL);

    if (res == NULL) {
        flow_error(flow, "Could not establish connection to "
                   "\"%s:%d\": %s", server_name, port, strerror(errno));
        freeaddrinfo(ressave);
        return -1;
    }

    if (saptr && lenp) {
        *saptr = malloc(res->ai_addrlen);
        if (*saptr == NULL)
            crit("malloc(): failed");
        memcpy(*saptr, res->ai_addr, res->ai_addrlen);
        *lenp = res->ai_addrlen;
    }

    freeaddrinfo(ressave);

    return fd;
}