summaryrefslogtreecommitdiff
path: root/toxcore/TCP_server.c
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2015-02-22 19:45:28 -0500
committerirungentoo <irungentoo@gmail.com>2015-02-22 19:45:28 -0500
commit085f90432f352ce2dfb31e0a7fbb83efa6b2f5db (patch)
tree7e0d0728da321e7b2713ad407915679c028d4a7b /toxcore/TCP_server.c
parentbca649fa676c4a867e7501ab43d59b95ecf96bd0 (diff)
When socket dies, kill it.
Use epoll to detect when socket closed connection.
Diffstat (limited to 'toxcore/TCP_server.c')
-rw-r--r--toxcore/TCP_server.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/toxcore/TCP_server.c b/toxcore/TCP_server.c
index 6d2ab62b..e5a154ce 100644
--- a/toxcore/TCP_server.c
+++ b/toxcore/TCP_server.c
@@ -1192,7 +1192,7 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
1192 sock_t sock = events[n].data.u64 & 0xFFFFFFFF; 1192 sock_t sock = events[n].data.u64 & 0xFFFFFFFF;
1193 int status = (events[n].data.u64 >> 32) & 0xFFFF, index = (events[n].data.u64 >> 48); 1193 int status = (events[n].data.u64 >> 32) & 0xFFFF, index = (events[n].data.u64 >> 48);
1194 1194
1195 if ((events[n].events & EPOLLERR) || (events[n].events & EPOLLHUP)) { 1195 if ((events[n].events & EPOLLERR) || (events[n].events & EPOLLHUP) || (events[n].events & EPOLLRDHUP)) {
1196 switch (status) { 1196 switch (status) {
1197 case TCP_SOCKET_LISTENING: { 1197 case TCP_SOCKET_LISTENING: {
1198 //should never happen 1198 //should never happen
@@ -1239,7 +1239,7 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
1239 } 1239 }
1240 1240
1241 struct epoll_event ev = { 1241 struct epoll_event ev = {
1242 .events = EPOLLIN | EPOLLET, 1242 .events = EPOLLIN | EPOLLET | EPOLLRDHUP,
1243 .data.u64 = sock_new | ((uint64_t)TCP_SOCKET_INCOMING << 32) | ((uint64_t)index_new << 48) 1243 .data.u64 = sock_new | ((uint64_t)TCP_SOCKET_INCOMING << 32) | ((uint64_t)index_new << 48)
1244 }; 1244 };
1245 1245
@@ -1255,7 +1255,7 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
1255 int index_new; 1255 int index_new;
1256 1256
1257 if ((index_new = do_incoming(TCP_server, index)) != -1) { 1257 if ((index_new = do_incoming(TCP_server, index)) != -1) {
1258 events[n].events = EPOLLIN | EPOLLET; 1258 events[n].events = EPOLLIN | EPOLLET | EPOLLRDHUP;
1259 events[n].data.u64 = sock | ((uint64_t)TCP_SOCKET_UNCONFIRMED << 32) | ((uint64_t)index_new << 48); 1259 events[n].data.u64 = sock | ((uint64_t)TCP_SOCKET_UNCONFIRMED << 32) | ((uint64_t)index_new << 48);
1260 1260
1261 if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock, &events[n]) == -1) { 1261 if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock, &events[n]) == -1) {
@@ -1271,7 +1271,7 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
1271 int index_new; 1271 int index_new;
1272 1272
1273 if ((index_new = do_unconfirmed(TCP_server, index)) != -1) { 1273 if ((index_new = do_unconfirmed(TCP_server, index)) != -1) {
1274 events[n].events = EPOLLIN | EPOLLET; 1274 events[n].events = EPOLLIN | EPOLLET | EPOLLRDHUP;
1275 events[n].data.u64 = sock | ((uint64_t)TCP_SOCKET_CONFIRMED << 32) | ((uint64_t)index_new << 48); 1275 events[n].data.u64 = sock | ((uint64_t)TCP_SOCKET_CONFIRMED << 32) | ((uint64_t)index_new << 48);
1276 1276
1277 if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock, &events[n]) == -1) { 1277 if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock, &events[n]) == -1) {