コード例 #1
0
ファイル: eclicork.c プロジェクト: AltraMayor/net-echo
/**
 * cork(): Cork socket to CORK_SIZE bytes.
 */
static inline void cork(int s)
{
	int rc, one = 1;
	rc = is_xia ?
		setsockopt(s, get_xdp_type(), XDP_CORK, &one, sizeof(int)):
		setsockopt(s, IPPROTO_UDP, UDP_CORK, &one, sizeof(int));
	assert(!rc);
}
コード例 #2
0
ファイル: eclicork.c プロジェクト: AltraMayor/net-echo
/**
 * uncork(): Uncork socket.
 */
static inline void uncork(int s)
{
	int rc, zero = 0;
	rc = is_xia ?
		setsockopt(s, get_xdp_type(), XDP_CORK, &zero, sizeof(int)):
		setsockopt(s, IPPROTO_UDP, UDP_CORK, &zero, sizeof(int));
	assert(!rc);
}
コード例 #3
0
ファイル: spray.c プロジェクト: cjdoucette/fountain
int main(int argc, char *argv[])
{
	struct sockaddr *srv, *cli;
	int s, srv_len, cli_len, rc;
	unsigned int fr;
	__u16 padding;

	if (check_srv_params(argc, argv))
		exit(1);

	s = socket(AF_XIA, SOCK_DGRAM, get_xdp_type());
	if (s < 0) {
		int orig_errno = errno;
		fprintf(stderr, "Cannot create XDP socket: %s\n",
			strerror(orig_errno));
		return 1;
	}

	srv = get_addr(argv[1], &srv_len);
	assert(srv);
	assert(!bind(s, srv, srv_len));
	cli = get_addr(argv[2], &cli_len);
	assert(cli);

	/* Read padding amount. */
	rc = sscanf(argv[4], "%hd", &padding);
	if (errno != 0) {
		fprintf(stderr, "%s: sscanf errno=%i: %s\n",
			__func__, errno, strerror(errno));
		return 1;
	} else if (rc != 1) { 
		fprintf(stderr, "No padding data exists.\n");
		return 1;
	}

	rc = sscanf(argv[5], "%d", &fr);
	if (errno != 0) {
		fprintf(stderr, "%s: sscanf errno=%i: %s\n",
			__func__, errno, strerror(errno));
		return 1;
	} else if (rc != 1) { 
		fprintf(stderr, "No failure rate exists.\n");
		return 1;
	}

	if (fr > 100) {
		fprintf(stderr, "Failure rate must be between 0 and 100.\n");
		return 1;
	}

	spray(s, cli, cli_len, argv[3], padding, fr);
	fprintf(stderr, "File sent.\n");

	free(cli);
	free(srv);
	assert(!close(s));
	return 0;
}