#include
<sys/socket.h>
int shutdown(int s,
int how);
how有三种选项,如下:
返回值:
返回-1时errno值如下:
接上面第一种情况,其实要让服务端接收到EOF很简单,我们需要使用如下代码:
shutdown(s, SHUT_WR);
//就是说不会再有人往s上写数据了,那么服务端读取时自然就会读到EOF
注意:showdown后仍然要调用close关闭socket
struct linger ling;
ling.l_onoff =
1;
ling.l_linger =
0;
setsockopt(fd, SOL_SOCKET, SO_LINGER,
(char*)&ling,
sizeof(ling));
close(fd);
结构体struct linger如下: struct linger{ int lonoff; int llinger; }; 有以下三种设置情况:
注意:内核拖延的时间取决于l_linger的值,阻塞时间超过该值就会发生超时