【网络程序设计学习】第一弹—常用套接字函数整理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/tch3430493902/article/details/101765240

常用套接字函数整理

基本套接字函数

  1. socket
    函数原型:int socket(int family,int type,int protocol)
    函数功能介绍:生成一个套接字。
    参数解释family:指明协议簇;type:套接字类型;protocol:指定协议。
    返回值:socket句柄。
    备注:实际上为一个socket数据结构分配存储空间,返回对应句柄。

  2. socketpair
    函数原型:int socketpairint family,int type,int protocol,int fd_array[2])
    函数功能介绍:生成一对连接好的套接字。
    参数解释:前三个参数同socket函数,fd_array[2]:用于存放两个套接字句柄。
    返回值:成功返回2,失败返回-1。
    备注:仅用于UNIX,可以看作是双向管道。

  3. bind
    函数原型:int bind(int fd,struct sockaddr *addressp,int addrlen)
    函数功能介绍:将套接字与本机网络地址和端口号绑定在一起。
    参数解释fd:套接字句柄;addressp:指向一个地址结构;addrlen:地址结构字节数。
    返回值:成功返回0,失败返回-1。
    备注:一般用于服务器端绑定公认端口,客户端可以不执行此操作。

  4. connect
    函数原型:int connect(int fd,struct sockaddr * addressp,int addrlen)
    函数功能介绍:连接服务器端套接字。
    参数解释:与bind的参数含义相同,不同之处是这里的地址是服务器端的。
    返回值:成功返回0,失败返回-1。
    备注:一般用于客户端向服务器发起连接,服务端可以不执行此操作。

  5. listen
    函数原型:int listen(int fd,int qlen)
    函数功能介绍:监听客户请求并将其插入请求队列中排队。
    参数解释fd:套接字句柄;qlen:请求队列长度。
    返回值:成功返回0,失败返回-1。
    备注:服务器端使用。

  6. accept
    函数原型:int accept(int fd,struct sockaddr * clientaddr,int *addrlen)
    函数功能介绍:从请求队列中取请求接受连接。
    参数解释fd:请求队列中的套接字句柄;clientaddr:客户机的地址;addrlen:地址结构长度。
    返回值:大于0是新建立的套接字句柄,执行成功。失败则返回-1。
    备注:适用于服务器端。返回的句柄是真正用于传输的套接字,在无连接请求时阻塞进程。

  7. read/write
    函数原型:int read/write(int fd,char *buf,int len)
    函数功能介绍:在套接字缓冲区中接收或发送数据。
    参数解释fd:套接字句柄;buf:套接字对应缓冲区地址;len:接收或发送数据的长度。
    返回值:大于0成功,为接收或发送数据的字节数。小于0则失败。
    备注:无。

  8. close
    函数原型:int close(int sockfd)
    函数功能介绍:关闭socket。
    参数解释sockfd:套接字句柄。
    返回值:成功返回1,失败返回-1。
    备注:只是本进程关闭对该套接字的一次引用,需要所有引用全部清除套接字才会消失。

高级套接字函数

  1. send/recv
    函数原型:int send/recv(int fd,char *buf,int len,int flags)
    函数功能介绍:通过信道发送或接收数据。
    参数解释fd:套接字句柄;buf:数据缓冲区;len:数据缓冲区字节数;flags:控制标记。
    返回值:失败返回-1,成功则返回一个大于0的数。
    备注:无连接协议可用函数sendto/recvfrom,此外还有一个更强大的sendmsgrecvmsg/函数,不再赘言。

  2. readv/writev
    函数原型:ssize_t readv(int fd,const struct iovec iov[],int iovcnt)
    函数功能介绍:用于对多个不连续的缓冲区散布读和聚集写。
    参数解释fd:套接字句柄;iov[]:存放缓冲区地址结构指针的数组;iovcnt:数组长度。
    返回值:失败返回-1,成功返回读/写的总字节数。
    备注:多缓冲区的字节传送。

  3. shutdown
    函数原型:int shutdown(int fd,int action)
    函数功能介绍:终止网络连接。
    参数解释fd:套接字句柄;action:0停止读,1停止写,2停止读写。
    返回值:成功返回0,失败返回-1。
    备注:关闭的是TCP连接,不考虑套接字引用计数。能够控制单向通道的开关。

  4. getpeername/getsockname
    函数原型:int getpeername/getsockname(int fd,struct sockaddr* proaddr,int * addrlen)
    函数功能介绍:获得与指定套接字相连的对端/本地地址。
    参数解释
    返回值fd:指定套接字句柄;proaddr:地址缓冲区指针;addrlen:缓冲区字节数指针。
    备注:无。

  5. getsockopt/setsockopt
    函数原型:int getsockopt/setsockopt(int sockfd, int level, int
    optname, void *optval, sock_len_t *optlen)
    函数功能介绍:获取/设置套接字选项。
    参数解释sockfd:套接字句柄;level:协议级别;optname:指定选项;optval:选项值缓冲区;optlen:缓冲区长度。
    返回值:成功返回0,失败返回-1。
    备注:对套接字的自定义设置。

  6. fcntl
    函数原型:int fcntl(int fd,int cmd,int arg)
    函数功能介绍:管理套接字属性。
    参数解释fd:套接字句柄;cmd:要执行的操作;arg:与操作配套的参数。
    返回值:成功返回值>=0,失败返回-1。
    备注:和套接字进程、阻塞有关。

  7. ioctl
    函数原型:int ioctl(int fd,int request,int * args)
    函数功能介绍:处理套接字各种设备选择项。
    参数解释fd:套接字句柄;request:指定操作类型;args:与request配套使用,存储返回参数值。
    返回值:成功返回0,失败返回-1。
    备注:可管理磁盘、文件、磁带、套接字、终端等设备或伪设备。

猜你喜欢

转载自blog.csdn.net/tch3430493902/article/details/101765240