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

socket编程accept返回值为0,是否正常?

    来源: 互联网  发布时间:2017-01-22

    本文导语:  socket编程server端程序接收client多连接请求后,sock = accept(iSock, &sin, &len);  sock的返回值为0,多数情况下看到的返回值都是正数,出现个零很是奇怪,在这里求助下有人遇到过吗?什么情况下会返回零呢?求大虾.... ...

socket编程server端程序接收client多连接请求后,sock = accept(iSock, &sin, &len);  sock的返回值为0,多数情况下看到的返回值都是正数,出现个零很是奇怪,在这里求助下有人遇到过吗?什么情况下会返回零呢?求大虾....

再看返回了错误码:Socket error 10038 - Socket operation on non-socket 即:非法的socket对象在操作 这个原因基本定位可以给accept返回值为0原因导致。

从我的程序运行来看确实出现了:too many openfiles 这个错误,即打开文件句柄过过。但是我的程序既有打开的文件也有打开的socket,用pfiles看进程打开的句柄数却并没用什么变化。程序日志跟踪打开的文件都被及时关闭,打开的socket也被关闭了。
确实有些奇怪,到底是因为什么原因导致打开文件句柄数过多呢?


|
0 也是一个合法的描述符
如果你事先关闭了0这个描述符,然后再accept,那么很可能返回0

close(0);
int fd = accept(...);

|


++。

|
楼上2位不错,可 0 1 2 是默认给系统预留的。 如果accept使用0 作为通道, 那么其他程序会受到影响。

|
"too many openfiles"----出现这种情况,"描述符打开过多"这一点应该是可以肯定的,你再仔细检查下是否有打开但没有关闭的描述符(包括文件和socket)。ls -l /proc/"进程号"/fd/基本可以查看某一进程所打开的描述符资源,对于socket可以使用netstat命令查看,如果有未关闭的socket,那么会有大量的CLOSE_WAIT状态的连接。
或者说是你的系统的最大描述符数量被改动过了(ulimit -n查看)。
希望能帮上忙,楼主解决问题时请与大家分享下原因。(:-:)

|
很有可能返回0的时候,你的socket文件描述符已经被异常或正常关闭了.Socket operation on non-socket,提示不是socket 文件符操作了.

|
accept有返回1或2的情况不?
如果有很有可能说明你的server端进程是有守护进程的,并且你这个dameom还是位于socket和accept之间的。

|

贴个代码看看,有点奇怪

|
socket标准规定成功后accept返回非负描述符即可,错误则返回-1;

只要非负就是正常的,有什么问题吗?

    
 
 

您可能感兴趣的文章:

  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • socket是否可以同时读写
  • socket如何判断接受缓冲区是否已满
  • read一个socket, 发现read到的长度是0, 是否一定代表对方调用了close关闭了socket?
  • 你是否可以回答Socket的问题?数据先后问题
  • UNIX Domain Socket通讯是否要求主机上要有网卡?
  • 谁知道solaris对socket的recv和send函数是否是原子操作,谢谢!!
  • socket编程,我如何确定与对方的连接是否正常?
  • linux下如何利用socket测试服务器是否可达?
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • 【急急急急急】socket的recvmsg() 函数是否能够在Linux2.6中正常使用
  • (linux c)socket数据接受后判断是否相等的问题
  • socket关闭是是否需要从epoll里面移出
  • 请问RST在什么情况下发送?? 使用TCP socket编程的话是否会引起这种TCP包的发送?
  • 非阻塞方式socket中, 去读select返回的sockfd是否一定是非0值??如果读到的字节数比期望少有没有什么好的处理模式??
  • 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的返回值
  • 请教: read一个socket, read返回需要多长时间?
  • socket创建失败,返回系统错误码84,invalid or incomplete multibyte or wide character
  • 急问socket编程:程序中执行sendto()返回errno=101是什么原因啊
  • socket连接函数connect()返回错误 errno 为 115,什么原因?谢谢
  • 求助UDP socket sendto返回EHOSTDOWN的问题
  • err=sock->ops->setsockopt(sock, SOL_SOCKET, ...);返回值代表的含义?
  • linux c socket http编程 返回http消息体出错!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • socket 编程时,write的写入的数据大于socket缓冲区,会有什么结果??
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • Linux下使用openssl api编程socket编程,为什么要编译啊?
  • 关于文件操作和Socket网络编程!
  • linux下socket编程问题!
  • socket编程 中的bind问题
  • socket编程--htons
  • 急!!请教关于linux socket编程的一个问题!!
  • 急!关于SOCKET编程,在线等待!
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • 多进程socket编程问题
  • 问一个socket编程问题,急~~~
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • 请教一个socket编程问题
  • 求助!!linux下socket编程
  • socket编程,使用recvfrom()函数监听问题。
  • sco unix下socket编程的问题,请大家帮忙
  • socket编程中的问题,请各位大侠指教!
  • 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 是哪里来得?


  • 站内导航:


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

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

    浙ICP备11055608号-3