【发布时间】:2014-08-17 22:23:31
【问题描述】:
我编写了一个代码,它使用每个线程间隔 3 秒 b/w 的线程打开多个 ssh 会话,我希望最大时出现“ERROR_SSH_TOO_MANY_CONNECTIONS”(错误号 112 (0x0070))。不。会话数超出。但我没有收到此错误,我能够成功进行 78 次会话,并且在第 79 次会话期间我得到“无法分配内存”,但在第 11 次会话期间我应该得到“ERROR_SSH_TOO_MANY_CONNECTIONS”。
注意: 1) 我没有更改“/etc/ssh/sshd_config”中的最大限制,默认为“10”。
最大会话数 10
2) 我在 switch 中运行此代码,它会从 switch 连接到我的主机服务器。
请告诉我为什么我没有收到此“ERROR_SSH_TOO_MANY_CONNECTIONS”错误。
int main()
{
int cntr =0;
void *th_res;
pthread_t tid[80];
while(cntr != 80) {
if(pthread_create(&tid[cntr], NULL, ssh_session, (void*)&tid[cntr])){
perror("pthread creation failed");
printf("errno = %d&&&&&&&&&&&&&&&&&&&&&&&\n",errno);
}
else
printf("tid[%d] = %d\t Session No:%d\n",cntr,(int)tid[cntr],cntr+1);
cntr++;
sleep(2);
}
cntr = 0;
while(cntr != 80) {
//printf("Main thread waiting for tid[%d] for joining\n",(int)tid[cntr]);
if(pthread_join(tid[cntr],&th_res)) {
perror("pthread join error");
}
if(th_res != NULL)
abort();
cntr++;
}
return 0;
}
void* ssh_session(void* arg)
{
int my_rc = 0;
//printf("Thread %d is executing\n",*(int*)arg);
my_rc = system("ssh -oSSHPassword=\"************\" spandiya@10.70.12.102");
//my_rc = system("ssh -oSSHPassword=\"fibranne\" root@10.17.18.103");
if (WEXITSTATUS(my_rc) != 0) {
printf("system command failed\n");
printf("WEXITSTATUS(my_rc) =%d\n",WEXITSTATUS(my_rc));
printf("my_rc =%d\n",my_rc);
printf("Session limit reached###########################\n");
return "Session limit reached";
}
printf("Thread %d is exiting\n",*(int*)arg);
return NULL;
}
【问题讨论】:
-
OT:为什么每次我读到一个使用“代码”而不是“代码”的问题时,我都会自动开始害怕即将发生的事情?我有那么老的笨蛋吗?相关问题:从您愿意分享的这件事中得到任何实际的输出(不仅仅是单个错误消息@invoke 79)?