【8】socket 开发 在Linux下使用C开发的应用通常都是网络应用,如果带有界面的以前都是使用QT,现在流行Android.底层应用通常大部分都是嵌入式网络应用,这些网络应用一般基于TCP/IP协议.GLIBC为网络开发提供了一个抽象概念:Socket.Socket是一个标准的UNIX文件描述符,通常一个抽象的通信端口使用这个文件描述符进行数据读写.可以通过查看进程打开的FD文件方式查看一个进程打开了多少个SOCKET,并且也这个可以通过uliimit -n来设置打开的文件描述符数量来达到限制的SOCKET数量.如下所示,可以通过进程ID号来查看描述符. root@2003:# ps -ef|grep Sec root 4591 1 0 Dec05 ? 00:00:00 /usr/bin/SecurityMgr root 25247 12281 0 13:22 ttyMM0 00:00:00 grep Sec root@2003:# ls -l /proc/4591/fd/ total 28 lr-x------ 1 root root 64 Dec 9 10:03 0 -> /dev/null lrwx------ 1 root root 64 Dec 9 10:03 10 -> socket:[10468] lrwx------ 1 root root 64 Dec 9 10:03 11 -> socket:[10475] lrwx------ 1 root root 64 Dec 9 10:03 12 -> socket:[10476] lrwx------ 1 root root 64 Dec 9 10:03 13 -> socket:[10479] lrwx------ 1 root root 64 Dec 9 10:03 14 -> socket:[10484] lrwx------ 1 root root 64 Dec 9 10:03 15 -> socket:[10485] lrwx------ 1 root root 64 Dec 9 10:03 17 -> socket:[11420] lrwx------ 1 root root 64 Dec 9 10:03 19 -> socket:[11423] lrwx------ 1 root root 64 Dec 9 10:03 20 -> socket:[15691] lrwx------ 1 root root 64 Dec 9 10:03 21 -> socket:[16015] lrwx------ 1 root root 64 Dec 9 10:03 22 -> socket:[16032] lrwx------ 1 root root 64 Dec 9 10:03 23 -> socket:[4321948] lrwx------ 1 root root 64 Dec 9 10:03 25 -> socket:[4328222]
拥有帝国一切,皆有可能。欢迎访问phome.net lrwx------ 1 root root 64 Dec 9 10:03 3 -> socket:[10461] lrwx------ 1 root root 64 Dec 9 10:03 32 -> socket:[5274] lrwx------ 1 root root 64 Dec 9 10:03 4 -> socket:[10462] lrwx------ 1 root root 64 Dec 9 10:03 43 -> socket:[6085] lrwx------ 1 root root 64 Dec 9 10:03 44 -> socket:[6086] lrwx------ 1 root root 64 Dec 9 10:03 5 -> socket:[10463] lrwx------ 1 root root 64 Dec 9 10:03 6 -> socket:[10464] lrwx------ 1 root root 64 Dec 9 10:03 7 -> socket:[10465] lrwx------ 1 root root 64 Dec 9 10:03 8 -> socket:[10466] lrwx------ 1 root root 64 Dec 9 10:03 9 -> socket:[10467] socket是一文件描述符,对socket的操作方式有点类似于文件的处理方式.只是使用不同的函数名称.我们要获取一个socket,对服务端来说,我们接着要将这个SOCKET与对外提供的IP/PORT进行绑定.绑定之后,服务端就开始监听这个SOCKET设备上的数据,一旦有数据从KERNEL,来到,服务端新建一个ACCEPT SOCKET文件描述符,通过这个描述符设备读取数据.socket处理方式同socket的类型相关,如SOCK_STREAM通常表示是TCP方式,而SOCK_DRAGM是UDP方式.这两种方式都是要拿到sockfd但是前者是面向连接的,如下图一所示,需要维护一个连接.而后者不需要维护一个连接,会少去几个步. 从上图可以看出对每一种网络应用,其基 |