标签: errno

如何在"case when"中捕获Errno :: ECONNRESET类?

我的应用程序(Ruby 1.9.2)可能会引发不同的异常,包括网络连接中断.我rescue Exception => e,然后case/when以不同的方式处理它们,但是几个错误直接通过我的案例else.

rescue Exception => e
    p e.class
    case e.class
        when Errno::ECONNRESET
            p 1
        when Errno::ECONNRESET,Errno::ECONNABORTED,Errno::ETIMEDOUT
            p 2
        else
            p 3
    end
end
Run Code Online (Sandbox Code Playgroud)

打印:

Errno::ECONNRESET
3
Run Code Online (Sandbox Code Playgroud)

ruby exception-handling case errno

29
推荐指数
1
解决办法
1万
查看次数

如何设置errno值?

我有两种不同方法的调用:

void func1() 
{
  // do something 
  if (fail) 
  {
    // then set errno to EEXIST

  }

}
Run Code Online (Sandbox Code Playgroud)

第二种方法:

void func2() 
{
  // do something 
  if (fail) 
  {
    // then set errno to ENOENT

  }

}
Run Code Online (Sandbox Code Playgroud)
  1. 当我设置errno为某个值时,它会做什么?只是错误检查?

  2. 我怎样才能设置errno在上面的方法func1,并func2EEXISTENOENT

谢谢

c linux error-handling errno

29
推荐指数
3
解决办法
4万
查看次数

哪些系统将EAGAIN和EWOULDBLOCK定义为不同的值?

只是好奇.哪些系统提供EAGAIN和EWOULDBLOCK #define它们作为不同的值?

unix posix errno

27
推荐指数
1
解决办法
9267
查看次数

为什么要回到负面的错误?(例如,返回-EIO)

另一个简单例子:

if (wpa_s->mlme.ssid_len == 0)
    return -EINVAL;
Run Code Online (Sandbox Code Playgroud)

为什么一元减去?对于在成功时返回> 0且在失败时返回<(=)0的函数,这(通常)是否完成,还是有其他原因?

c errno return-value

25
推荐指数
4
解决办法
2万
查看次数

从Python访问errno?

我遇到了一个相当复杂的Python模块,它不会返回有用的错误代码(它实际上无法安静地失败).但是,它调用的底层C库设置了errno.

通常errno来自OSError属性,但由于我没有异常,我无法得到它.

使用ctypes,libc.errno不起作用,因为errno是GNU libc中的一个宏.Python 2.6有一些功能,但Debian仍然使用Python 2.5.将C模块插入我的纯Python程序只是为了阅读errno令我感到厌恶.

有没有办法访问errno?只有Linux的解决方案很好,因为被包装的库是仅限Linux的.我也不必担心线程,因为我在运行失败的时候只运行一个线程.

python linux errno python-2.5

22
推荐指数
4
解决办法
8985
查看次数

将perror输出重定向到fprintf(stderr,"")

如果系统调用函数失败,我们通常使用perror来输出错误消息.我想使用fprintf输出perror字符串.我该怎么做这样的事情:

fprintf(stderr, perror output string here);
Run Code Online (Sandbox Code Playgroud)

c errno stderr

22
推荐指数
1
解决办法
4万
查看次数

无法分配请求的地址 - 可能的原因?

我有一个由主服务器和分布式从服务器组成的程序.从属服务器向服务器发送状态更新,如果服务器在固定时间内没有从特定从属设备收到消息,则它将从属设备标记为关闭.这种情况一直在发生.

通过检查日志,我发现从服务器只能向服务器发送一个状态更新,然后永远不能发送另一个更新,总是无法调用connect()"无法分配请求的地址(99).

奇怪的是,从服务器能够向服务器发送多个其他更新,并且所有连接都发生在同一端口上.似乎这种失败的最常见原因是连接处于打开状态,但我无法找到任何未解决的问题.还有其他可能的解释吗?

为了澄清,这是我如何连接:

struct sockaddr *sa; // parameter
size_t           sa_size; //parameter
int              i = 1;
int              stream;

stream = socket(AF_INET,SOCK_STREAM,0);
setsockopt(stream,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));
bindresvport(stream,NULL);
connect(stream,sa,sa_size);
Run Code Online (Sandbox Code Playgroud)

此代码用于获取与另一个服务器的连接,并且这4个调用中的任何一个失败都会导致该函数失败.

c sockets tcp errno

22
推荐指数
4
解决办法
11万
查看次数

Python异常处理

C有perror和errno,它打印并存储遇到的最后一个错误.这在执行文件io时很方便,因为我不必将fstat()作为fopen()参数失败的每个文件向用户提供调用失败的原因.

我想知道在python中优雅地处理IOError异常时获取errno的正确方法是什么?

In [1]: fp = open("/notthere")
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)

/home/mugen/ in ()

IOError: [Errno 2] No such file or directory: '/notthere'


In [2]: fp = open("test/testfile")
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)

/home/mugen/ in ()

IOError: [Errno 13] Permission denied: 'test/testfile'


In [5]: try:
   ...:     fp = open("nothere")
   ...: except IOError:
   ...:     print "This failed for some reason..."
   ...:     
   ...:     
This failed for some reason...

python exception errno ioerror

21
推荐指数
3
解决办法
6万
查看次数

Python socket.error:[Errno 111]连接被拒绝

我正在尝试使用套接字编写一个文件传输程序.代码的服务器端运行正常.但是,在客户端,我收到以下错误

Traceback (most recent call last):
File "client.py", line 54, in <module>
uploadFiles(directory)
File "client.py", line 36, in uploadFiles
transferFile(fname)
File "client.py", line 13, in transferFile     
cs.connect((HOST, 36258))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 111] Connection refused
Run Code Online (Sandbox Code Playgroud)

我的代码如下

import os
import socket

def transferFile(fname):
   HOST = '127.0.0.1'
   CPORT = 36258
   MPORT = 36250
   FILE = fname
   cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   cs.connect((HOST, 36258))
   cs.send("SEND " + FILE)
   cs.close()
   ms = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   ms.connect((HOST, MPORT))
   f = open(FILE, …
Run Code Online (Sandbox Code Playgroud)

python sockets errno

20
推荐指数
1
解决办法
15万
查看次数

为什么不能打印出错误的价值?

我在SO"低质量"帖子中查看以下代码以确保样本有效,我的问题是为什么我不能打印errno的值?

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main(){
    FILE *fp;
    errno = 0;
    fp=fopen("Not_exist.txt","r");
    if(fp == NULL && errno == ENOENT)
        perror("file not exist");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下是我尝试打印值时发生的情况:

(gdb) p errno
Cannot find thread-local variables on this target
(gdb)
Run Code Online (Sandbox Code Playgroud)

我可以很好地打印fp的值.正如您所料,它的价值在于0x00.

我看了/usr/include/errno.h很多其他包含文件作为其中的一部分errno.h,我无法弄清楚如何定义errno.任何指针或帮助将不胜感激.我只是好奇它; 什么都没有打破.

谢谢.

c gdb errno

16
推荐指数
4
解决办法
1万
查看次数