double dropin;
double dropout;
-int do_recv(struct utcp_connection *c, const void *data, size_t len) {
+ssize_t do_recv(struct utcp_connection *c, const void *data, size_t len) {
if(!data || !len) {
if(errno) {
fprintf(stderr, "Error: %s\n", strerror(errno));
dir &= ~2;
fprintf(stderr, "Connection closed by peer\n");
}
- return 0;
+ return -1;
}
return write(1, data, len);
}
c = nc;
}
-int do_send(struct utcp *utcp, const void *data, size_t len) {
+ssize_t do_send(struct utcp *utcp, const void *data, size_t len) {
int s = *(int *)utcp->priv;
if(drand48() >= dropout)
return send(s, data, len, MSG_DONTWAIT);
else
- return 0;
+ return len;
}
int main(int argc, char *argv[]) {
connected = true;
}
+ freeaddrinfo(ai);
+
struct utcp *u = utcp_init(server ? do_accept : NULL, NULL, do_send, &s);
if(!u)
return 1;
- utcp_set_connection_timeout(u, 10);
+ utcp_set_mtu(u, 1300);
+ utcp_set_user_timeout(u, 10);
if(!server)
c = utcp_connect(u, 1, do_recv, NULL);
{.fd = s, .events = POLLIN | POLLERR | POLLHUP},
};
- char buf[1024];
+ char buf[102400];
int timeout = utcp_timeout(u);
while(dir) {
if(fds[1].revents) {
struct sockaddr_storage ss;
- socklen_t sl;
+ socklen_t sl = sizeof ss;
int len = recvfrom(s, buf, sizeof buf, MSG_DONTWAIT, (struct sockaddr *)&ss, &sl);
if(len <= 0)
break;