Пример #1
0
// receive callback
void p2p_receive_handler(const char* data, uint32_t len, struct p2pconnection* p2pcon)
{
	//struct p2pconnection* p2pcon = (struct p2pconnection*)arg;
	int fd = udp_sock_fd(p2pcon->ulsock, AF_INET);
	struct sa* lsa =NULL;
	lsa = (struct sa*)mem_zalloc(sizeof(struct sa),NULL);
	udp_local_get(p2pcon->ulsock, lsa);
	CUDT::postRecv(p2pcon->udtsock, &(lsa->u.sa), data, len);
	re_printf("p2p receive data:%s\n", data);
}
Пример #2
0
// connect callback
void p2p_request_handler(struct p2phandle *p2p, const char* peername, struct p2pconnection **p2pcon)
{
	re_fprintf(stderr, "p2p accept from:%s\n", peername);
	int err = p2p_accept(p2p, p2pcon, peername, p2p_receive_handler, *p2pcon);
	int fdaccept = udp_sock_fd((*p2pcon)->ulsock, AF_INET);
	struct sa* lsa = NULL;
	lsa = (struct sa*)mem_zalloc(sizeof(struct sa),NULL);
	udp_local_get((*p2pcon)->ulsock, lsa);
	sa_cpy(lsa, p2p->sactl);
	int fdlisten = tcp_conn_fd(p2p->ltcp);
	UDPSOCKET udpsock = (UDPSOCKET)fdlisten;
	(*p2pcon)->udtsock = CUDT::socket(AF_INET, SOCK_STREAM, 0);
	CUDT::bind((*p2pcon)->udtsock, &udpsock, &(p2p->sactl->u.sa), p2p->sactl->len);
	CUDT::listen((*p2pcon)->udtsock, &(lsa->u.sa), 10);
	if (err)
	{
		re_fprintf(stderr, "p2p accept error:%s\n", strerror(err));
		return ;
	}
}
static void print_udp_bufsize(int af)
{
	struct udp_sock *us = NULL;
	struct sa laddr;
	int fd;
	int sndbuf;
	int rcvbuf;
	socklen_t sndbuf_len = sizeof(sndbuf);
	socklen_t rcvbuf_len = sizeof(rcvbuf);
	int err;

	sa_init(&laddr, af);

	err = udp_listen(&us, &laddr, NULL, NULL);
	if (err) {
		warning("test: udp_listen failed (%m)\n", err);
		goto out;
	}

	fd = udp_sock_fd(us, af);
	if (-1 == fd) {
		warning("test: no udp socket fd\n");
		goto out;
	}

	getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &sndbuf, &sndbuf_len);
	getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, &rcvbuf_len);

	re_printf("test: udp socket buffersize for %-8s:"
		  "    SO_SNDBUF=%d SO_RCVBUF=%d\n",
		  net_af2name(af),
		  sndbuf, rcvbuf);

 out:
	mem_deref(us);
}