connect 是 errno 为111 115 101 22 错误分析

您所在的位置:网站首页 android10111 connect 是 errno 为111 115 101 22 错误分析

connect 是 errno 为111 115 101 22 错误分析

2024-04-03 04:55| 来源: 网络整理| 查看: 265

22:参数错误,比如ip地址不合法,没有目标端口等

101:网络不可达,比如不能ping通

111:链接被拒绝,比如目标关闭链接等

115:当链接设置为非阻塞时,目标没有及时应答,返回此错误,socket可以继续使用

 

附录:Linux的错误码表(errno table)

_ 124 EMEDIUMTYPE_ Wrong medium type _ 123 ENOMEDIUM__ No medium found _ 122 EDQUOT___  Disk quota exceeded _ 121 EREMOTEIO__ Remote I/O error _ 120 EISNAM___  Is a named type file _ 119 ENAVAIL___ No XENIX semaphores available _ 118 ENOTNAM___ Not a XENIX named type file _ 117 EUCLEAN___ Structure needs cleaning _ 116 ESTALE___  Stale NFS file handle _ 115 EINPROGRESS  +Operation now in progress _ 114 EALREADY__  Operation already in progress _ 113 EHOSTUNREACH  No route to host _ 112 EHOSTDOWN__ Host is down _ 111 ECONNREFUSED  Connection refused _ 110 ETIMEDOUT_  +Connection timed out _ 109 ETOOMANYREFS  Too many references: cannot splice _ 108 ESHUTDOWN__ Cannot send after transport endpoint shutdown _ 107 ENOTCONN__  Transport endpoint is not connected _ 106 EISCONN___ Transport endpoint is already connected _ 105 ENOBUFS___ No buffer space available _ 104 ECONNRESET_  Connection reset by peer _ 103 ECONNABORTED  Software caused connection abort _ 102 ENETRESET__ Network dropped connection on reset _ 101 ENETUNREACH_ Network is unreachable _ 100 ENETDOWN__  Network is down _  99 EADDRNOTAVAIL Cannot assign requested address _  98 EADDRINUSE_  Address already in use _  97 EAFNOSUPPORT  Address family not supported by protocol _  96 EPFNOSUPPORT  Protocol family not supported _  95 EOPNOTSUPP_  Operation not supported _  94 ESOCKTNOSUPPORT Socket type not supported _  93 EPROTONOSUPPORT Protocol not supported _  92 ENOPROTOOPT_ Protocol not available _  91 EPROTOTYPE_  Protocol wrong type for socket _  90 EMSGSIZE__ +Message too long _  89 EDESTADDRREQ  Destination address required _  88 ENOTSOCK__  Socket operation on non-socket _  87 EUSERS___  Too many users _  86 ESTRPIPE__  Streams pipe error _  85 ERESTART__  Interrupted system call should be restarted _  84 EILSEQ___  Invalid or incomplete multibyte or wide character _  83 ELIBEXEC__  Cannot exec a shared library directly _  82 ELIBMAX___ Attempting to link in too many shared libraries _  81 ELIBSCN___ .lib section in a.out corrupted _  80 ELIBBAD___ Accessing a corrupted shared library _  79 ELIBACC___ Can not access a needed shared library _  78 EREMCHG___ Remote address changed _  77 EBADFD___  File descriptor in bad state _  76 ENOTUNIQ__  Name not unique on network _  75 EOVERFLOW__ Value too large for defined data type _  74 EBADMSG__  +Bad message _  73 EDOTDOT___ RFS specific error _  72 EMULTIHOP__ Multihop attempted _  71 EPROTO___  Protocol error _  70 ECOMM____ Communication error on send _  69 ESRMNT___  Srmount error _  68 EADV____  Advertise error _  67 ENOLINK___ Link has been severed _  66 EREMOTE___ Object is remote _  65 ENOPKG___  Package not installed _  64 ENONET___  Machine is not on the network _  63 ENOSR____ Out of streams resources _  62 ETIME____ Timer expired _  61 ENODATA___ No data available _  60 ENOSTR___  Device not a stream _  59 EBFONT___  Bad font file format _  57 EBADSLT___ Invalid slot _  56 EBADRQC___ Invalid request code _  55 ENOANO___  No anode _  54 EXFULL___  Exchange full _  53 EBADR____ Invalid request descriptor _  52 EBADE____ Invalid exchange _  51 EL2HLT___  Level 2 halted _  50 ENOCSI___  No CSI structure available _  49 EUNATCH___ Protocol driver not attached _  48 ELNRNG___  Link number out of range _  47 EL3RST___  Level 3 reset _  46 EL3HLT___  Level 3 halted _  45 EL2NSYNC__  Level 2 not synchronized _  44 ECHRNG___  Channel number out of range _  43 EIDRM____ Identifier removed _  42 ENOMSG___  No message of desired type _  40 ELOOP____ Too many levels of symbolic links _  39 ENOTEMPTY_  +Directory not empty _  38 ENOSYS___ +Function not implemented _  37 ENOLCK___ +No locks available _  36 ENAMETOOLONG +File name too long _  35 EDEADLK__  +Resource deadlock avoided _  34 ERANGE___ +Numerical result out of range _  33 EDOM____ +Numerical argument out of domain _  32 EPIPE___  +Broken pipe _  31 EMLINK___ +Too many links _  30 EROFS___  +Read-only file system _  29 ESPIPE___ +Illegal seek _  28 ENOSPC___ +No space left on device _  27 EFBIG___  +File too large _  26 ETXTBSY___ Text file busy _  25 ENOTTY___ +Inappropriate ioctl for device _  24 EMFILE___ +Too many open files _  23 ENFILE___ +Too many open files in system _  22 EINVAL___ +Invalid argument _  21 EISDIR___ +Is a directory _  20 ENOTDIR__  +Not a directory _  19 ENODEV___ +No such device _  18 EXDEV___  +Invalid cross-device link _  17 EEXIST___ +File exists _  16 EBUSY___  +Device or resource busy _  15 ENOTBLK___ Block device required _  14 EFAULT___ +Bad address _  13 EACCES___ +Permission denied _  12 ENOMEM___ +Cannot allocate memory _  11 EAGAIN___ +Resource temporarily unavailable _  10 ECHILD___ +No child processes __ 9 EBADF___  +Bad file descriptor __ 8 ENOEXEC__  +Exec format error __ 7 E2BIG___  +Argument list too long __ 6 ENXIO___  +No such device or address __ 5 EIO____  +Input/output error __ 4 EINTR___  +Interrupted system call __ 3 ESRCH___  +No such process __ 2 ENOENT___ +No such file or directory __ 1 EPERM___  +Operation not permitted #_  0 --_____  Success

 

附录参考 http://fanqiang.chinaunix.net/a4/b7/20010913/0900001283.html

摘要:

讨论关于利用select()检测对方Socket关闭的问题:    仍然是本地Socket有东东可读,因为对方Socket关闭时,会发一个关闭连接  通知报文,会马上被select()检测到的。关于TCP的连接(三次握手)和关  闭(二次握手)机制,敬请参考有关TCP/IP的书籍。    不知是什么原因,UNIX好象没有提供通知进程关于Socket或Pipe对方关闭的  信号,也可能是cpu所知有限。总之,当对方关闭,一执行recv()或read(),  马上回返回-1,此时全局变量errno的值是115,相应的sys_errlist[errno]  为"Connect refused"(请参考/usr/include/sys/errno.h)。所以,在上  篇的for(;;)...select()程序块中,当有东西可读时,一定要检查recv()或  read()的返回值,返回-1时要作出关断本地Socket的处理,否则select()会  一直认为有东西读,其结果曾几令cpu伤心欲断针脚。不信你可以试试:不检  查recv()返回结果,且将收到的东东(实际没收到)写至标准输出...  在有名管道的编程中也有类似问题出现。具体处理详见拙作:发布一个有用  的Socket客户方原码。    至于主动写Socket时对方突然关闭的处理则可以简单地捕捉信号SIGPIPE并作  出相应关断本地Socket等等的处理。SIGPIPE的解释是:写入无读者方的管道。  在此不作赘述,请详man signal。    以上是cpu在作tcp/ip数据传输实验积累的经验,若有错漏,请狂炮击之。    唉,昨天在hacker区被一帮孙子轰得差点儿没短路。ren cpu(奔腾的心) z80    补充关于select在异步(非阻塞)connect中的应用,刚开始搞socket编程的时候  我一直都用阻塞式的connect,非阻塞connect的问题是由于当时搞proxy scan  而提出的呵呵  通过在网上与网友们的交流及查找相关FAQ,总算知道了怎么解决这一问题.同样  用select可以很好地解决这一问题.大致过程是这样的:    1.将打开的socket设为非阻塞的,可以用fcntl(socket, F_SETFL, O_NDELAY)完  成(有的系统用FNEDLAY也可).    2.发connect调用,这时返回-1,但是errno被设为EINPROGRESS,意即connect仍旧  在进行还没有完成.    3.将打开的socket设进被监视的可写(注意不是可读)文件集合用select进行监视,  如果可写,用          getsockopt(socket, SOL_SOCKET, SO_ERROR, &error, sizeof(int));  来得到error的值,如果为零,则connect成功.    在许多unix版本的proxyscan程序你都可以看到类似的过程,另外在solaris精华  区->编程技巧中有一个通用的带超时参数的connect模块. 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3