`
aigo
  • 浏览: 2675869 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[linux] 将socket设置为非阻塞(non-blocking)

阅读更多

原文:http://blog.csdn.net/wwwsq/article/details/970198

有一个非常有迷惑性的做法是:
u_long has = 1;
ioctl(m_sock, FIONBIO , &has);
这个函数会非常无耻的返回你success,但是它实际上很可能什么也没做。

正确的做法应该是使用fcntl:
int flags = fcntl(m_sock, F_GETFL, 0);
fcntl(m_sock, F_SETFL, flags|O_NONBLOCK);

这真是一个隐蔽的问题,折腾了我两天。线程每每停留在send()调用那里,我始终没怀疑到:用ioctl设置FIONBIO成功之后,socket竟然还是阻塞的。

分享到:
评论

相关推荐

    Linux下的Socket编程实例(阻塞和非阻塞)

    Socket 编程中有两种方式:阻塞(Blocking)和非阻塞(Non-Blocking)。阻塞 Socket 指的是在执行某个操作时,程序将等待该操作完成,而非阻塞 Socket 则可以继续执行其他操作,不会被阻塞。 Linux下的Socket编程 ...

    Socket C++ TCP阻塞\非阻塞 服务器 客户端 开发

    通过本篇内容的学习,您将了解到设置socket函数为非阻塞模式的方法,并且能够深入了解阻塞与非阻塞模式在socket编程中的应用。此外,我们还将探讨SOCKET类的设计与实现。 #### 一、基本概念与环境搭建 **1.1 基本...

    python 并发编程 非阻塞IO模型原理解析

    非阻塞IO(non-blocking IO) Linux下,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子: 从图中可以看出,当用户进程发出read操作时,如果kernel中的数据还...

    实战Linux Socket编程源码

    - **非阻塞(Non-blocking)**:使用`fcntl()`或`ioctl()`函数将Socket设置为非阻塞模式,使得`accept()`、`send()`和`recv()`在没有准备好操作时不会阻塞,而是立即返回错误或可用数据。 在实战源码中,第11章可能...

    4-【Linux网络编程】同步,异步,阻塞,非阻塞-1809261

    非阻塞(Non-blocking)I/O则允许进程在数据未准备好时立即返回,而不是等待。在非阻塞模式下,当尝试读取数据时,如果数据未准备好,`recvfrom`会返回错误,进程可以继续执行其他任务,然后稍后再尝试读取。这种...

    同步异步阻塞非阻塞

    2. 非阻塞 IO(Non-Blocking IO) 非阻塞 IO 与阻塞 IO 相反,在用户进程调用 recvfrom 系统调用时,kernel 不会阻塞用户进程,而是立即返回一个错误代码,表示当前没有可读数据。用户进程可以继续执行其他任务,而...

    JAVA IO同步,异步

    在本文中,我们将讨论基于系统底层通信技术Socket 的JAVA IO同步和异步操作,包括阻塞(Blocking)和非阻塞(Non-Blocking)IO 操作。 同步(Synchronous)IO 同步IO 是指应用程序在执行IO 操作时,需要等待IO ...

    DNS 解析协议 c 函数, 实例, 方便构造自己的非阻塞解析函数, 适用于任何平台

    struct sockaddr_in* non_blocking_dns_resolve(const char* domain_name, int timeout); ``` 这个函数接受一个域名,一个超时时间(以毫秒计),并返回一个结构体,其中包含解析到的IP地址。实现中,它可能利用了I/...

    Socket高性能IO模型浅析

    (2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(NewIO)库。(3)IO多路复用(IOMultiplexing):即经典的Reactor设计...

    linux 非堵塞tcp/server tcp/client

    在Linux系统中,非堵塞(Non-blocking)TCP编程是一种高级网络编程技术,它允许程序以异步的方式处理网络I/O操作。非堵塞模式下,当一个socket无法立即完成读写操作时,系统调用不会阻塞,而是立刻返回,使得程序...

    IO模型中的阻塞模型和非阻塞模型

    根据数据读写操作是否可以立即返回,IO模型通常被划分为阻塞式(Blocking I/O)与非阻塞式(Non-Blocking I/O)。这两种模式在实际应用中各有优势,了解它们的工作原理有助于开发者更好地设计高性能系统。 #### ...

    tcp服务器epoll的多种实现1

    Non-blocking I/O 是一种非阻塞的 I/O 模型,在这个模型中,进程不会阻塞,而是立即返回一个错误代码,表明 I/O 操作尚未完成。 Non-blocking I/O 的缺点是需要额外的逻辑来处理 I/O 事件。 I/O 多路复用是指使用一...

    Netty面试题 20道.pdf

    多路复用 IO 可以同时处理多个连接,调用系统 select 和 recvfrom 函数,每一个 socket 设置为 non-blocking。缺点是连接数不高的情况下,性能不一定比多线程+阻塞 IO 好。 6. 信号驱动 IO 和异步 IO 信号驱动 IO ...

    IO模型1

    2. **非阻塞I/O(Non-blocking IO)** - 非阻塞I/O模式下,用户进程在调用读操作时,如果内核数据未准备好,不会立即阻塞,而是返回错误。用户进程需要不断尝试读取,直到数据准备就绪。这种方式要求用户进程自己...

    C语言服务器,多版本

    3. non-blocking socket:非阻塞模式下,socket调用不会挂起,而是立即返回一个错误,需要不断轮询检查数据是否就绪。这种模式可以避免阻塞,但编程复杂度较高。 4. select:select是早期的多路复用I/O机制,它可以...

    indy in depth(高清中文版)

    **5.16 Non-Blocking File Write 写非阻塞文件** 非阻塞模式下的文件写入不会阻塞当前线程。即使数据还未完全写入磁盘,线程也可以继续执行其他任务。 **5.17 File Write Comparison 写文件对比** 阻塞模式下的文件...

    linux+tomcat+mysql+solr调优

    - **Nio**(Non-blocking I/O):非阻塞式的IO模型,适合中等并发场景。 - **Apr**(Apache Portable Runtime):提供了对操作系统的本地优化访问,性能最优但需要安装相应的本地库。 对于低版本Tomcat,建议通过`...

    WinSOCKET五种模型_VS2015

    2. **非阻塞I/O模型(Non-blocking I/O Model)** 非阻塞I/O模型中,socket调用不会挂起,而是立即返回一个错误代码,告知调用者数据尚未准备好。此时,应用程序需要通过轮询方式检查数据是否准备就绪。非阻塞模型...

Global site tag (gtag.js) - Google Analytics