详解C语言中accept()函数和shutdown()函数的使用
C语言accept()函数:接受socket连线
头文件:
#include<sys/types.h>#include<sys/socket.h>
定义函数:
intaccept(ints,structsockaddr*addr,int*addrlen);
函数说明:accept()用来接受参数s的socket连线.参数s的socket必需先经bind()、listen()函数处理过,当有连线进来时accept()会返回一个新的socket处理代码,往后的数据传送与读取就是经由新的socket处理,而原来参数s的socket能继续使用accept()来接受新的连线要求.连线成功时,参数addr所指的结构会被系统填入远程主机的地址数据,参数addrlen为scokaddr的结构长度.关于机构sockaddr的定义请参考bind().
返回值:成功则返回新的socket处理代码,失败返回-1,错误原因存于errno中.
错误代码:
1、EBADF参数s非合法socket处理代码.
2、EFAULT参数addr指针指向无法存取的内存空间.
3、ENOTSOCK参数s为一文件描述词,非socket.
4、EOPNOTSUPP指定的socket并非SOCK_STREAM.
5、EPERM防火墙拒绝此连线.
6、ENOBUFS系统的缓冲内存不足.
7、ENOMEM核心内存不足.
C语言shutdown()函数:终止socket通信
头文件:
#include<sys/socket.h>
定义函数:
intshutdown(ints,inthow);
函数说明:shutdown()用来终止参数s所指定的socket连线.参数s是连线中的socket处理代码,参数how有下列几种情况:
- how=0终止读取操作.
- how=1终止传送操作
- how=2终止读取及传送操作
返回值:成功则返回0,失败返回-1,错误原因存于errno.
错误代码:
1、EBADF参数s不是有效的socket处理代码
2、ENOTSOCK参数s为一文件描述词,非socket
3、ENOTCONN参数s指定的socket并未连线