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

socket关闭后为什么recv不返回

    来源: 互联网  发布时间:2016-10-16

    本文导语:  程序中实现客户端和服务器端功能,socket均使用阻塞方式接收和发送。客户端主动关闭本次socket,recv立即从阻塞方式返回。而在服务器端,socket由accept获得,参数均设置成和客户端socket一样,程序运行时,服务器端...

程序中实现客户端和服务器端功能,socket均使用阻塞方式接收和发送。客户端主动关闭本次socket,recv立即从阻塞方式返回。而在服务器端,socket由accept获得,参数均设置成和客户端socket一样,程序运行时,服务器端自动关闭socket,程序仍阻塞在recv函数中,请各位大拿帮忙分析一下是什么问题,同样的程序在win32下正常。

|
遇到过这样的问题,客户端断开后服务端可以很好的检测,但是相反服务端断开后客户端一只阻塞读,其原因在于你在服务端调用的是close,而不是shutdown函数;因为close只有在最后一个获得引用被关闭时菜释放网络端点,如果你的服务端套接字被复制了(dup),那么它将不会被关闭;相反shutdown函数可以使一个套接字处于不活动状态,无论它的引用文件描述符是多少;所以建议你在服务器端采用shutdown函数。


这些东西在《unix环境高级编程》439页有详细讲述。

|
server主动close掉connect,server会通知client,client会做出应答,
然后client会发起close。


参考这个帖子,跟你差不多的问题

http://topic.csdn.net/u/20100914/19/6ff94f36-9ef7-420f-9764-613e53c2c0f3.html?88453

    
 
 

您可能感兴趣的文章:

  • 关闭socket 失败是什么原因
  • 关闭socket的问题
  • read一个socket, 发现read到的长度是0, 是否一定代表对方调用了close关闭了socket?
  • 如何关闭socket
  • close() 怎么关不掉socket? socket应该怎么关闭?
  • ftp服务器socket关闭问题
  • http连接,服务器端关闭socket
  • 连续创建和关闭1024个socket就会出现问题,错误码24,怎么办?
  • 服务器端关闭,客户端select 会一直可读, 读的长度是-1,怎么在不关闭客户端socket下,清除可读
  • 急:如何关闭此socket?
  • socket问题,当客户端关闭或者实际链路断开后服务器端怎么判断?
  • SOCKET 编程之从容关闭套接字如何实现????
  • linux socket 如何开启和关闭nagle
  • UDP怎么检测对方socket已关闭无法接收数据?
  • socket read阻塞:一个线程关闭另一个线程错误
  • 请教怎样关闭服务器端的socket?
  • 怎样关闭 socket server (客户端正连接时)
  • 并发服务器设计中为啥关闭原来的socket描述符?
  • socket关闭是是否需要从epoll里面移出
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • socket的close是立刻返回,还是等四路握手过程完成再返回
  • java 中 SOCKET 的ACCEPT函数有返回值吗?怎样返回才是正常的?
  • 当close(socket)时,为什么linux下slect不返回而windows下就返回??????????
  • socket read返回问题
  • PF_PACKET,socket返回-1
  • 请问:SCO UNIX下SOCKET的recv返回-1,errno=9?在线等·····
  • (socket通信)poll提示有数据可读 recv却返回 EAGAIN
  • socket send的返回值
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • 请教: read一个socket, read返回需要多长时间?
  • socket创建失败,返回系统错误码84,invalid or incomplete multibyte or wide character
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • socket编程:recv(...)函数问题求救
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • socket tcp 关于 alarm() 和 recv() ?
  • socket编程 是recv阻塞
  • 关于socket的send(),recv()的问题.
  • socket中的疑问:read,write和send,recv的区别
  • solaris socket 非阻塞recv产生 EBADF 错误
  • socket编程中的函数send和recv如何被信号中断?
  • 请教,socket中recv不能一次完全接收send发送的字节数?
  • 谁知道solaris对socket的recv和send函数是否是原子操作,谢谢!!
  • Linux下怎么用read或recv函数完全接收socket发来的数据?
  • socket通讯时如何为线程池分配Recv任务?
  • 如果两个线程操作同一个Socket,一个线程recv,另一个send。这样会不会导致程序莫名其妙的退出
  • linux socket recv Resource temporarily unavailable
  • Connection reset by peer: JVM_recv in socket input stream read这个问题到底怎么解决??
  • ##socket编程中send&recv的问题
  • 急!嵌入式linux下socket编程,recv()的问题:
  • 做socket程序,用recv,send这些函数好还是用fread,fwrite好?
  • 哪位高手可以解释一下为什么Linux下的socket函数recv(),不被信号中断掉?
  • linux c socket recv问题
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍


  • 站内导航:


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

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

    浙ICP备11055608号-3