[英]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_GETFD
到F_GETFL
和F_SETFD
到F_SETFL
,因為你需要修改文件狀態標志,而不是文件描述符標志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.