Linux网络编程之阻塞与非阻塞

简介: Linux网络编程之阻塞与非阻塞

第1关:阻塞

#include <sys/socket.h> // 包含套接字函数库
#include <fcntl.h>
void setsocketblock(int socketID)
{
/*******Begin*********/
    int flags = fcntl (socketID, F_GETFL, 0);
    //检查当前属性是否为BLOCK,否则将其设置为BLOCK
    if (flags & O_NONBLOCK)
    {
        fcntl (socketID, F_SETFL, flags&~O_NONBLOCK);
        int recvTimeout = 5 * 1000;
        setsockopt(socketID,SOL_SOCKET,SO_RCVTIMEO,(char *)&recvTimeout,sizeof(int));
    }
/********End*********/
}


第2关:非阻塞

#include <sys/socket.h> // 包含套接字函数库
#include <fcntl.h>
void setsocketunblock(int socketID)
{
/*******Begin*********/
    int flags = fcntl (socketID, F_GETFL, 0);
    //检查当前属性是否为NON_BLOCK,否则将其设置为NON_BLOCK
    if (0 == (flags & O_NONBLOCK))
    {
        fcntl (socketID, F_SETFL, flags|O_NONBLOCK);
    }
/********End*********/
}


第3关:阻塞与非阻塞切换

#include <sys/socket.h> // 包含套接字函数库
#include <fcntl.h>
void setsocketunblock(int socketID)
{
/*******Begin*********/
    int flags = fcntl (socketID, F_GETFL, 0);
    //检查当前属性是否为NON_BLOCK,否则将其设置为NON_BLOCK
    if (0 == (flags & O_NONBLOCK))
    {
        fcntl (socketID, F_SETFL, flags|O_NONBLOCK);
    }
/********End*********/
}
void setsocketblock(int socketID)
{
/*******Begin*********/
    int flags = fcntl (socketID, F_GETFL, 0);
    //检查当前属性是否为BLOCK,否则将其设置为BLOCK
    if (flags & O_NONBLOCK)
    {
        fcntl (socketID, F_SETFL, flags&~O_NONBLOCK);
        int recvTimeout = 5 * 1000;
        setsockopt(socketID,SOL_SOCKET,SO_RCVTIMEO,(char *)&recvTimeout,sizeof(int));
    }
/********End*********/
}
目录
相关文章
|
3月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
132 2
|
8天前
|
Linux 网络性能优化 网络安全
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
50 28
|
4天前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
21 11
|
30天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
76 15
|
2月前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
188 7
|
3月前
|
域名解析 网络协议 安全
|
4月前
|
运维 监控 网络协议
|
3月前
|
存储 Ubuntu Linux
2024全网最全面及最新且最为详细的网络安全技巧 (三) 之 linux提权各类技巧 上集
在本节实验中,我们学习了 Linux 系统登录认证的过程,文件的意义,并通过做实验的方式对 Linux 系统 passwd 文件提权方法有了深入的理解。祝你在接下来的技巧课程中学习愉快,学有所获~和文件是 Linux 系统登录认证的关键文件,如果系统运维人员对shadow或shadow文件的内容或权限配置有误,则可以被利用来进行系统提权。上一章中,我们已经学习了文件的提权方法, 在本章节中,我们将学习如何利用来完成系统提权。在本节实验中,我们学习了。
|
4月前
|
Ubuntu Linux 虚拟化
Linux虚拟机网络配置
【10月更文挑战第25天】在 Linux 虚拟机中,网络配置是实现虚拟机与外部网络通信的关键步骤。本文介绍了四种常见的网络配置方式:桥接模式、NAT 模式、仅主机模式和自定义网络模式,每种模式都详细说明了其原理和配置步骤。通过这些配置,用户可以根据实际需求选择合适的网络模式,确保虚拟机能够顺利地进行网络通信。
160 1