Linux Accept函数简单介绍

运维 系统运维
sockfd相当简单,是和listen()中一样的套接字描述符。addr是个指向局部的数据结构sockaddr_in的指针。这是要求接入的信息所要去的地方(你可以测定那个地址在那个端口呼叫你)。

系统调用accept()会有点古怪的地方的!你可以想象发生这样的事情:有人从很远的地方通过一个你在侦听(listen())的端口连接(connect())到你的机器。它的连接将加入到等待接受(accept())的队列中。你调用accept()告诉它你有空闲的连接。它将返回一个新的套接字文件描述符!这样你就有两个套接字了,原来的一个还在侦听你的那个端口,新的在准备发送(send())和接收(recv())数据。这就是Linux Accept函数的过程!

Linux Accept函数是这样定义的:
#include<sys/socket.h>
intaccept(intsockfd,void*addr,int*addrlen);

sockfd相当简单,是和listen()中一样的套接字描述符。addr是个指向局部的数据结构sockaddr_in的指针。这是要求接入的信息所要去的地方(你可以测定那个地址在那个端口呼叫你)。在它的地址传递给accept之前,addrlen是个局部的整形变量,设置为sizeof(structsockaddr_in)。accept将不会将多余的字节给addr。如果你放入的少些,那么它会通过改变addrlen的值反映出来。同样,在错误时返回-1,并设置全局错误变量errno。
现在是你应该熟悉的代码片段。
 

#include<string.h> 
#include<sys/socket.h> 
#include<sys/types.h> 
#defineMYPORT3490/*用户接入端口*/  
#defineBACKLOG10/*多少等待连接控制*/  
main()  
{  
intsockfd,new_fd;/*listenonsock_fd,newconnectiononnew_fd*/  
structsockaddr_inmy_addr;/*地址信息*/  
structsockaddr_intheir_addr;/*connector 'saddressinformation*/  
intsin_size;  
sockfd=socket(AF_INET,SOCK_STREAM,0);/*错误检查*/  
my_addr.sin_family=AF_INET;/*hostbyteorder*/  
my_addr.sin_port=htons(MYPORT);/*short,networkbyteorder*/  
my_addr.sin_addr.s_addr=INADDR_ANY;/*auto-fillwithmyIP*/  
bzero(&(my_addr.sin_zero),;/*zerotherestofthestruct*/  
/*don 'tforgetyourerrorcheckingforthesecalls:*/  
bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr));  
listen(sockfd,BACKLOG);  
sin_size=sizeof(structsockaddr_in);  
new_fd=accept(sockfd,&their_addr,&sin_size);  
.  
.  
.  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

Linux Accept函数注意事项,在系统调用send()和recv()中你应该使用新的套接字描述符new_fd。如果你只想让一个连接进来,那么你可以使用close()去关闭原来的文件描述符sockfd来避免同一个端口更多的连接。

【编辑推荐】

  1. Linux 查看磁盘空间实现代码介绍
  2. Linux操作系统需要微软的十大帮助
  3. 探寻Linux到底需要多低的配置
  4. Linux测试工具tcpdump监视TCP/IP连接命令介绍
  5. Linux流量控制实例应用介绍
责任编辑:chenqingxiang 来源: CSDN
相关推荐

2010-06-18 10:11:16

Linux Accep

2010-06-18 09:13:14

Linux Accep

2009-08-07 17:12:07

C# DLL函数

2009-09-23 10:15:23

Linux curlLinux命令行工具

2010-03-18 16:34:33

Linux命令

2010-06-09 17:48:15

Linux 编程工具

2009-08-12 10:11:18

C# 回调函数

2009-08-07 09:29:22

C#数组C#函数

2010-06-22 17:09:52

Linux Autom

2010-06-21 15:49:59

Linux apt是什

2010-06-30 12:46:18

Linux SNMP工

2009-12-24 15:59:58

Linux hal

2010-06-21 17:10:02

Linux Arp命令

2010-03-16 11:20:53

Linux 优化

2009-12-23 19:13:40

Fedora Linu

2009-12-29 08:54:09

Ubuntu Linu

2010-03-10 15:05:22

linux系统备份方式

2010-06-11 11:15:33

Linux编程工具

2010-03-11 10:52:49

Ubuntu Linu

2009-12-22 10:46:35

点赞
收藏

51CTO技术栈公众号