内核态的socket编程

记不清从哪个kernel版本开始,内核态就不能直接使用系统调用了。当然,socket的系统调用也不能用了。不过好在kernel提供了一组内核态的socket API。在net/socket.c文件中,可以看到这么几个导出符号:

EXPORT_SYMBOL(kernel_sendmsg);
EXPORT_SYMBOL(kernel_recvmsg);
EXPORT_SYMBOL(sock_create_kern);
EXPORT_SYMBOL(sock_release);
EXPORT_SYMBOL(kernel_bind);
EXPORT_SYMBOL(kernel_listen);
EXPORT_SYMBOL(kernel_accept);
EXPORT_SYMBOL(kernel_connect);
EXPORT_SYMBOL(kernel_getsockname);
EXPORT_SYMBOL(kernel_getpeername);
EXPORT_SYMBOL(kernel_getsockopt);
EXPORT_SYMBOL(kernel_setsockopt);
EXPORT_SYMBOL(kernel_sendpage);
EXPORT_SYMBOL(kernel_sock_ioctl);
EXPORT_SYMBOL(kernel_sock_shutdown);

基本上,在用户态的socket的API,在内核态都有对应的API。


下面是一个项目中的代码,socket操作我加了注视。不用去关心代码功能,只要看一下socket部分的操作即可,非常简单。

#include <linux/socket.h>
#include <linux/net.h>
#include <linux/in.h>

struct fsg_common{
....
  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NIO(New I/O)是一种基于通道和缓冲区的IO模型,与传统的基于流的IO模型相比,NIO 提供了更高效、更灵活的IO操作方式。Socket编程是一种网络编程技术,用于实现计算机之间的通信。 在Java中,NIO是通过java.nio包来实现的,主要涉及到以下几个重要的类和接口: 1. Channel(通道):负责连接和传输数据。 2. Buffer(缓冲区):用于存储数据。 3. Selector(选择器):用于管理多个通道的事件,实现非阻塞IO。 NIO的主要特点包括: 1. 非阻塞IO:可以通过Selector实现非阻塞IO操作,一个线程可以管理多个通道。 2. 缓冲区操作:数据的读写通过缓冲区进行,提高了效率。 3. 通道之间的数据传输:可以直接从一个通道将数据传输到另一个通道,避免了数据在应用程序和内核空间之间的拷贝。 而Socket编程则是基于TCP/IP协议的一种网络编程技术,通过Socket可以实现不同计算机之间的通信。在Java中,可以使用java.net包中的Socket和ServerSocket类来实现Socket编程Socket编程主要涉及到客户端和服务器端两个角色,其中客户端使用Socket与服务器端建立连接,进行数据的发送和接收;服务器端使用ServerSocket监听指定的端口,接收客户端的连接请求,并进行数据处理。 Socket编程常用的一些方法包括: 1. Socket类的构造方法:用于创建一个套接字对象。 2. connect()方法:用于与服务器建立连接。 3. getInputStream()和getOutputStream()方法:用于获取套接字的输入流和输出流,进行数据的读写。 4. close()方法:用于关闭套接字。 总而言之,NIO是一种高效的IO模型,而Socket编程则是一种实现网络通信的技术,它们在Java中可以相互结合使用,实现高性能的网络应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值