簡體   English   中英

如何設置文件描述符無阻塞?

[英]how to set file descriptor non-blocking?

我有兩種方法來設置文件描述符非阻塞。

fcntl(conn_fd, F_SETFD, (fcntl(conn_fd, F_GETFD, 0)|O_NONBLOCK));

要么

 fcntl(conn_fd, F_SETFD, (fcntl(conn_fd, F_GETFD)|O_NONBLOCK));

void setnonblocking(int sock) {
    int opt;

    opt = fcntl(sock, F_GETFL);
    if (opt < 0) {
        printf("fcntl(F_GETFL) fail.");
    }
    opt |= O_NONBLOCK;
    if (fcntl(sock, F_SETFL, opt) < 0) {
        printf("fcntl(F_SETFL) fail.");
    }
}

為什么函數setnonblocking可以將文件描述符設置為非阻塞。但是另一個不能。我在epoll獲得新連接時使用此功能。

O_NONBLOCK是文件狀態標志,而不是文件描述符標志。

也許在您的fcntl(conn_fd, F_SETFD, (fcntl(conn_fd, F_GETFD)|O_NONBLOCK)); ,你需要改變F_GETFDF_GETFLF_SETFDF_SETFL ,因為你需要修改文件狀態標志,而不是文件描述符標志。

暫無
暫無

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

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