簡體   English   中英

在ssh守護程序的非阻塞套接字中,執行nmap腳本后,select()始終返回1

[英]In a non blocking socket in ssh daemon, select() always returns 1 after executing nmap script

在ssh守護程序中,select()總是正確返回,但是在執行以下nmap腳本后,

nmap -sV -O -A-腳本ssh2-enum-algos

即使未與ssh服務器建立連接,select()始終返回1。

還有其他幾個這樣的線程,但是我的代碼找不到問題。

我的代碼看起來像這樣,

while (1) 
{
    memcpy(tmp_read_set, read_set, sizeof(fd_set));
    retValSS = select(FD_SETSIZE, tmp_read_set, NULL, NULL, NULL);
    switch (retValSS)
    {
        case -1:
            LOG1(CRIT, "select() failed, errno=%d", ipcom_errno);
            goto cleanup;
        case 0: // Timeout....
            break;
        default:
            for(i=0; i<MAX_LISTEN_PORTS; i++)
            {
                if(lst_sock[i] == INVALID_SOCKET)
                    break;

                if(FD_ISSET(lst_sock[i], tmp_read_set))
                {
                    clt_sock = accept(lst_sock[i], NULL, NULL);
                    if (INVALID_SOCKET == clt_sock) /*INVALID_SOCKET is -1*/
                    {
                        LOG1(ERR, "accept() failed, errno=%d", errno);
                        continue;
                    }
                    if(srv_ctx->no_clients >= srv_ctx->max_clients)
                    {
                        LOG0(INFO, "max no of connected clients reached, disconnecting client");
                        close(clt_sock);
                        continue;
                    }
                    else
                    {
                       //some work is being done
                    }
                }
            }
        }
    }

我不斷收到錯誤日志,

accept()失敗,errno = 0

奇怪的是errno為0,表示沒有錯誤。 如果沒有錯誤,我認為accept()應該不會失敗。 有人可以解釋在哪種情況下accept()會失敗。

如果有人可以幫助我,我將非常感激。

您希望select()返回什么? 考慮一下select()通常用於等待多個文件描述符-如果您要連接兩個描述符,那么僅基於select的返回值,如何知道哪個成功/失敗? 您顯然不會。

這就是為什么select()僅僅告訴您哪些文件描述符已經過某種更改的原因,並且您應該獨立確定那是什么。 如果使用connect(),則應調用getsockopt()來檢索連接嘗試的結果。 請參閱此答案 ,其中解釋了如何執行無阻塞connect()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM