在完成端口中 如果我通过心跳方式 检测到某一client 断线
但是他断线时 GetQueuedCompletionStatus 并没有返回我用 closesocket来关闭该连接时 原来在该socket上投递的io 操作会在 GetQueuedCompletionStatus 中返回吗?
但是他断线时 GetQueuedCompletionStatus 并没有返回我用 closesocket来关闭该连接时 原来在该socket上投递的io 操作会在 GetQueuedCompletionStatus 中返回吗?
一般采取的措施是"从容关闭"shutdown(s,SD_BOTH),但是数据是肯定丢失了,如何设置让程序满足具体
应用的要求(即让没发完的数据发送出去后在关闭socket)?
struct linger {
u_short l_onoff;
u_short l_linger;
};
linger m_sLinger;
m_sLinger.l_onoff=1;//(在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)
// 如果m_sLinger.l_onoff=0;则功能和2.)作用相同;
m_sLinger.l_linger=5;//(容许逗留的时间为5秒)
setsockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,sizeof(linger));
Note:1.在设置了逗留延时,用于一个非阻塞的socket是作用不大的,最好不用;
2.如果想要程序不经历SO_LINGER需要设置SO_DONTLINGER,或者设置l_onoff=0;