projects
/
swifty.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use Linux-like indentation in mptp.c
[swifty.git]
/
src
/
libswift
/
channel.cpp
diff --git
a/src/libswift/channel.cpp
b/src/libswift/channel.cpp
index
5313095
..
c05ec03
100644
(file)
--- a/
src/libswift/channel.cpp
+++ b/
src/libswift/channel.cpp
@@
-27,7
+27,9
@@
tint Channel::start = now_t::now;
tint Channel::epoch = now_t::now/360000000LL*360000000LL; // make logs mergeable
uint64_t Channel::global_dgrams_up=0, Channel::global_dgrams_down=0,
Channel::global_raw_bytes_up=0, Channel::global_raw_bytes_down=0,
tint Channel::epoch = now_t::now/360000000LL*360000000LL; // make logs mergeable
uint64_t Channel::global_dgrams_up=0, Channel::global_dgrams_down=0,
Channel::global_raw_bytes_up=0, Channel::global_raw_bytes_down=0,
- Channel::global_bytes_up=0, Channel::global_bytes_down=0;
+ Channel::global_bytes_up=0, Channel::global_bytes_down=0,
+ Channel::global_buffers_up=0, Channel::global_syscalls_up=0,
+ Channel::global_buffers_down=0, Channel::global_syscalls_down=0;
sckrwecb_t Channel::sock_open[] = {};
int Channel::sock_count = 0;
swift::tint Channel::last_tick = 0;
sckrwecb_t Channel::sock_open[] = {};
int Channel::sock_count = 0;
swift::tint Channel::last_tick = 0;
@@
-253,29
+255,38
@@
Address swift::BoundAddress(evutil_socket_t sock) {
}
}
-int Channel::SendTo (evutil_socket_t sock, const Address& addr, struct evbuffer *evb) {
+int Channel::SendTo (evutil_socket_t sock, const Address& addr, struct evbuffer *
*
evb) {
- int length = evbuffer_get_length(evb);
- int addr_len = sizeof(struct sockaddr_mptp) + addr.addr->count * sizeof(struct mptp_dest);
- struct iovec iov[1];
+ int count = addr.addr->count;
+ int addr_len = sizeof(struct sockaddr_mptp) + count * sizeof(struct mptp_dest);
+ struct iovec iov[count];
+ int lengths[count];
struct msghdr msg;
memset(&msg, 0, sizeof(msg));
memset(&iov, 0, sizeof(iov));
struct msghdr msg;
memset(&msg, 0, sizeof(msg));
memset(&iov, 0, sizeof(iov));
- iov[0].iov_base = evbuffer_pullup(evb, length);
- iov[0].iov_len = length;
+ for (int i=0; i<count; ++i) {
+ lengths[i] = evbuffer_get_length(evb[i]);
+ iov[i].iov_base = evbuffer_pullup(evb[i], lengths[i]);
+ iov[i].iov_len = lengths[i];
+ }
msg.msg_iov = iov;
msg.msg_iov = iov;
- msg.msg_iovlen =
1
;
+ msg.msg_iovlen =
count
;
msg.msg_name = addr.addr;
msg.msg_namelen = addr_len;
int r = sendmsg(sock, &msg, 0);
if (r<0) {
print_error("can't send");
msg.msg_name = addr.addr;
msg.msg_namelen = addr_len;
int r = sendmsg(sock, &msg, 0);
if (r<0) {
print_error("can't send");
- evbuffer_drain(evb, length); // Arno: behaviour is to pretend the packet got lost
+ for (int i=0; i<count; ++i)
+ evbuffer_drain(evb[i], lengths[i]); // Arno: behaviour is to pretend the packet got lost
}
else
}
else
- evbuffer_drain(evb,r);
- global_dgrams_up++;
- global_raw_bytes_up+=length;
+ for (int i=0; i<count; ++i)
+ evbuffer_drain(evb[i], addr.addr->dests[i].bytes);
+ global_dgrams_up+=count;
+ global_buffers_up+=count;
+ global_syscalls_up++;
+ for (int i=0; i<count; ++i)
+ global_raw_bytes_up+=lengths[i];
Time();
return r;
}
Time();
return r;
}
@@
-322,11
+333,7
@@
int Channel::RecvFrom (evutil_socket_t sock, Address& addr, struct evbuffer **ev
print_error("error on recv");
}
length = 0;
print_error("error on recv");
}
length = 0;
- printf("Received from %d addresses in one system call.\n", addr.addr->count);
for (int i=0; i<addr.addr->count; ++i) {
for (int i=0; i<addr.addr->count; ++i) {
- struct in_addr aux;
- aux.s_addr = addr.addr->dests[i].addr;
- printf("Received from %s, %d bytes\n", inet_ntoa(aux), addr.addr->dests[i].bytes);
length += addr.addr->dests[i].bytes;
vec[i].iov_len = addr.addr->dests[i].bytes;
if (evbuffer_commit_space(evb[i], &vec[i], 1) < 0) {
length += addr.addr->dests[i].bytes;
vec[i].iov_len = addr.addr->dests[i].bytes;
if (evbuffer_commit_space(evb[i], &vec[i], 1) < 0) {
@@
-335,6
+342,8
@@
int Channel::RecvFrom (evutil_socket_t sock, Address& addr, struct evbuffer **ev
}
}
global_dgrams_down+=addr.addr->count;
}
}
global_dgrams_down+=addr.addr->count;
+ global_buffers_down+=addr.addr->count;
+ global_syscalls_down++;
global_raw_bytes_down+=length;
Time();
return length;
global_raw_bytes_down+=length;
Time();
return length;