关闭连接

函数原型

1
2
#include <unistd.h>
int close(int fd);

形参

fd参数是待关闭的socket。不过,close系统调用并非总是立即关闭一个连接而是先将fd的引用计数减一。只有当fd的引用数为0时,才真正关闭。多进程程序中,一次fork的系统调用默认将使父进程中打开的socket的引用计数加1.所以我们必须在父进程和子进程中都对该socket执行close。

其他关闭函数

由于close系统调用并不是马上就关闭连接而是减少其引用次数。如果想马上关闭连接,可以使用shutdown系统调用。

函数原型

1
2
3
#include <sys/socket.h>

int shutdown(int sockfd, int howto);

形参

sockfd为待关闭的socket。howto参数决定了shutdown的行为,它可取的值如下:
image

返回值

成功返回0,失败则返回-1并设置errno。