• <small id="ck0wk"><meter id="ck0wk"><menuitem id="ck0wk"></menuitem></meter></small>

  • <big id="ck0wk"></big>

  • 鍍金池/ 問答/Java  Linux  網絡安全/ linux下tcp編程如何正確的關閉套接字?

    linux下tcp編程如何正確的關閉套接字?

    假設服務端有段代碼,開了兩個線程,一個處理客戶端連接,一個讀取客戶端發送的消息。

    m_fd = socket(AF_INET, SOCK_STREAM, 0);
    
    bind(...);
    listen(...);
    
    pid_t pid;
    while (1)
    {
        m_client_fd = accept(m_server_fd, (sockaddr*)&client_addr, &len);
    
        pid = fork();
    
        if (pid == 0) // 子進程
        {
             close(m_fd); // 關閉
    
             do_read_from_client(m_client_fd); // 處理m_client_fd客戶端發過來的消息
    
             close(m_client_fd); // 關閉
             exit(EXIT_SUCCESS);
        }
        else
        {
             close(m_client_fd); // 關閉
        }
    }
    
    /**********************這邊還有一個關閉***************************/
    
    close(m_fd); // 關閉
    
    /****************************************************************/

    在涉及到多線程的時候,如何正確的關閉文件描述符 fd,我上面的寫法對么?

    回答
    編輯回答
    薔薇花
    1. 你并不是只開了 2 個進程,而是來一個請求就開一個進程
    2. m_server_fd 哪里出來的?
    3. 明確下 進程 和 線程,在線程中可不一樣

    如果 m_server_fd 和 m_fd 是一個東西,只是寫錯了,那就沒啥問題

    2017年12月1日 12:11
    編輯回答
    不二心

    不對

    服務端套接字 不用關閉 關閉了就收不了請求了,
    客戶端套接字在子進程中關閉就行了, 不能在父進程關閉, 父進程關了 子進程萬一執行慢不就讀不到了嗎

    2018年4月29日 18:28
    男生女生一起差差差带痛声,插曲的痛的视频30分钟,男生和女生在一起差差的视频