Browse Source

support multiple servers

pull/4/merge
Max Lv 11 years ago
parent
commit
8085fa8b81
1 changed files with 11 additions and 7 deletions
  1. 18
      local.c

18
local.c

@ -33,9 +33,12 @@
#define EWOULDBLOCK EAGAIN
#endif
#define MAX_SERVER_NUM 10
#define min(a,b) (((a)<(b))?(a):(b))
static char *_server;
static char *_servers[MAX_SERVER_NUM];
static int _server_num;
static char *_remote_port;
static int _timeout;
@ -542,7 +545,8 @@ static void accept_cb (EV_P_ ev_io *w, int revents)
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
int err = getaddrinfo(_server, _remote_port, &hints, &res);
int index = clock() % _server_num;
int err = getaddrinfo(_servers[index], _remote_port, &hints, &res);
if (err) {
perror("getaddrinfo");
close_and_free_server(EV_A_ server);
@ -593,7 +597,6 @@ static void print_usage() {
int main (int argc, char **argv)
{
char *server = NULL;
char *remote_port = NULL;
char *port = NULL;
char *key = NULL;
@ -604,11 +607,12 @@ int main (int argc, char **argv)
char *f_path = NULL;
opterr = 0;
_server_num = 0;
while ((c = getopt (argc, argv, "f:s:p:l:k:t:m:")) != -1) {
switch (c) {
case 's':
server = optarg;
_servers[_server_num++] = strdup(optarg);
break;
case 'p':
remote_port = optarg;
@ -632,7 +636,7 @@ int main (int argc, char **argv)
}
}
if (server == NULL || remote_port == NULL ||
if (_server_num == 0 || remote_port == NULL ||
port == NULL || key == NULL) {
print_usage();
exit(EXIT_FAILURE);
@ -690,7 +694,6 @@ int main (int argc, char **argv)
signal(SIGPIPE, SIG_IGN);
// init global variables
_server = strdup(server);
_remote_port = strdup(remote_port);
_timeout = atoi(timeout);
_method = TABLE;
@ -700,7 +703,8 @@ int main (int argc, char **argv)
}
}
LOGD("calculating ciphers %d\n", _method);
LOGD("calculating ciphers\n");
if (_method == RC4) {
enc_key_init(key);
} else {

Loading…
Cancel
Save