#define MSG_NOSIGNAL 0
#endif
-int addressfamily = AF_UNSPEC;
-int seconds_till_retry = 5;
-int max_connection_burst = 100;
+static const int max_connection_burst = 100;
/* Setup sockets */
/* Now that there is a working socket, fill in the rest and register this connection. */
c->status.connecting = true;
+ c->status.initiator = true;
c->name = xstrdup(outgoing->node->name);
c->last_ping_time = mesh->loop.now.tv_sec;
}
/// Delayed close of a filedescriptor.
-static void tarpit(int fd) {
- static int pits[10] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
- static int next_pit = 0;
+static void tarpit(meshlink_handle_t *mesh, int fd) {
+ if(!fd) {
+ return;
+ }
- if(pits[next_pit] != -1) {
- closesocket(pits[next_pit]);
+ if(mesh->pits[mesh->next_pit]) {
+ closesocket(mesh->pits[mesh->next_pit]);
}
- pits[next_pit++] = fd;
+ mesh->pits[mesh->next_pit++] = fd;
- if(next_pit >= (int)(sizeof pits / sizeof pits[0])) {
- next_pit = 0;
+ if(mesh->next_pit >= (int)(sizeof mesh->pits / sizeof mesh->pits[0])) {
+ mesh->next_pit = 0;
}
}
/* Rate limit incoming connections to max_connection_burst/second. */
- static int connection_burst;
- static int connection_burst_time;
-
- if(mesh->loop.now.tv_sec != connection_burst_time) {
- connection_burst_time = mesh->loop.now.tv_sec;
- connection_burst = 0;
+ if(mesh->loop.now.tv_sec != mesh->connection_burst_time) {
+ mesh->connection_burst_time = mesh->loop.now.tv_sec;
+ mesh->connection_burst = 0;
}
- if(connection_burst >= max_connection_burst) {
- tarpit(fd);
+ if(mesh->connection_burst >= max_connection_burst) {
+ tarpit(mesh, fd);
return;
}
- connection_burst++;
+ mesh->connection_burst++;
// Accept the new connection