当前位置:  技术问答>linux和unix

recv 阻塞 怎么退出

    来源: 互联网  发布时间:2016-08-22

    本文导语:  一个客户端阻塞接收服务器端数据,服务器有两台(主,辅),如果主的断了,就连接辅的,如果主的启动,就去连接主的,就必须把辅的断掉;我发现,如果自己主动close(socket),如果客户端刚好在接收数据,则一直...

一个客户端阻塞接收服务器端数据,服务器有两台(主,辅),如果主的断了,就连接辅的,如果主的启动,就去连接主的,就必须把辅的断掉;我发现,如果自己主动close(socket),如果客户端刚好在接收数据,则一直阻塞在recv,直到服务器发数据过来,才返回-1;

void *RecvFromAPP(void *arg)
{
char buf[2048+1]={0};
char temp[2048+1]={0};
int pos=0;
int res=0;
int len=0;
while(1)
{
if(pos0)
{
len=pos+res;
pos=Packet_DetachFromAPP(buf,len); //这个是分成完整的包,并放到队列中,会用来队列锁
}
}
return NULL;
}

我本来想直接把这线程关掉,用phread_cancel,发现这个函数就算调用,线程也不一定会关;后来想用信号让他退出,但是发现他如果在分包,这时候队列的锁就没办法解,我想请问下大家:怎样退出这个了?

|
可以试一下shutdown(socket, SHUT_RD),让该套接字关闭读段。

|
你这样方法有点儿粗暴.

应该通过控制socket发送切断通知,让客户端自己挂断重新连接。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • recv如何使用?
  • 虚拟机的linux,在其中运行Server和Client,Server端send了一个大小4096B的包,客户端recv到3845B,用netstat查看连接,Recv-Q和Send-Q项显示为0,为什么没收完?其余字节哪去了??
  • socket编程:recv(...)函数问题求救
  • recv在什么情况下会返回0
  • socket tcp 关于 alarm() 和 recv() ?
  • 请教soclet中recv()函数最大返回值的问题
  • 对recv函数第四个参数置0的疑问
  • 关于recv函数的问题
  • linux 网络编程 recv函数
  • linux c recv
  • 请问 : read, 与recv 两个函数有什么区别啊?
  • recv 接收 ,接收空间不够大, 可以通过什么知道?
  • 关于socket的send(),recv()的问题.
  • socket中的疑问:read,write和send,recv的区别
  • 求助:关于单线程recv时的超时问题
  • linux c 网络编程时用 recv 函数
  • 请问:SCO UNIX下SOCKET的recv返回-1,errno=9?在线等·····
  • socket编程中的函数send和recv如何被信号中断?
  • (socket通信)poll提示有数据可读 recv却返回 EAGAIN
  • recv无法接受数据


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3