【问题标题】:Odd socket() error -- returns -1, but errno=ERROR_SUCCESS奇数 socket() 错误——返回 -1,但 errno=ERROR_SUCCESS
【发布时间】:2010-01-04 14:47:33
【问题描述】:

我正在 Linux 机器上使用 C/C++(混合)开发专用游戏服务器。我有以下 sn-p 代码:

int sockfd=socket(AI_INET, SOCK_DGRAM, 0);
if(sockfd==-1)
{
    int err=errno;
    fprintf(stderr,"%s",strerror(err));
    exit(1);
}

我的问题是套接字返回 -1(表示失败)并且正在打印错误字符串,但它是“成功”(ERROR_SUCCESS)。

其他说明:

  • 我正在请求端口 >1024 上的套接字(断章取义,但我想我会提到)
  • 我正在以超级用户身份执行应用程序

【问题讨论】:

  • 您是从应用中剪切/粘贴代码还是重新输入?如果这是重新输入,我会检查您的代码是否在 if 中有 ==(比较)而不是 =(赋值)。
  • 这是一个`=='好吧...

标签: c++ c sockets errno


【解决方案1】:

我觉得自己非常愚蠢。仔细查看我的代码,在我的开发计算机上显示:

if(sockfd==-1);
...

【讨论】:

  • 你不是第一个这样做的人,也不会是最后一个:-)
  • 这正是 ERROR_SUCCESS 存在的原因。 :-)
  • aviraldg,您可能希望接受自己的答案,以便问题显示为已解决。
  • 让这成为一个教训:始终复制并粘贴真实代码,以演示您所询问的问题。
【解决方案2】:

你有多个线程在运行吗?他们可能会覆盖 errno 值。

socket() 和 if() 之间有没有你遗漏的代码行?另一个函数调用可能会覆盖 errno。

【讨论】:

  • C 标准没有线程的概念。虽然 posix 要求它是线程本地的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 2012-01-22
  • 2011-12-01
  • 2015-02-21
  • 1970-01-01
  • 2021-07-28
相关资源
最近更新 更多