套接字创建失败的原因是什么?

时间:2019-01-28 18:15:11

标签: c sockets network-programming serversocket unix-socket

我正在使用以下参数创建套接字-

fd = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);

但是由于某种原因,套接字创建失败,并且fd设置为-1。

  1. 我想了解套接字创建失败的原因和所有原因?
  2. 如何确定我的套接字创建失败的原因是什么?

注意:这是可重复的,我们连续5次以500毫秒的间隔重试套接字创建,而这5次失败。

1 个答案:

答案 0 :(得分:1)

正如Eugene Sh / WeatherVane所说,要查看错误:

#include <errno.h>
#include <stdio.h>
#include <string.h>
...
fd = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
if (fd == -1) {
  printf("error cannot create socket, errno = %d : %s\n",
         errno, strerror(errno));
  ...return/exit etc
}
...

我错了吗,或者域必须是PF_INET,然后socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);必须是socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);吗?

sctp(7) - Linux man page

编辑:在raspbian(Linux raspberrypi 4.14.79)下,我可以同时做这两个


如果您以 root 身份运行,是否还会发生错误?特别是如果您使用的是Android系统(请参见what can cause a socket() “Permission denied” error?