不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2019-09-08 23:33  分类:Linux_C  编辑

accept()函数:接受socket连线

头文件:

#include <sys/types.h> 
#include <sys/socket.h>

定义函数:

int accept(int s, struct sockaddr *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 核心内存不足;

shutdown()函数:终止socket通信

头文件:

#include <sys/socket.h>

定义函数:

int shutdown(int s, int how);

函数说明:

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 并未连线;