在调用socket()之前将其设置为0将来的文件描述符

时间:2012-11-26 16:07:21

标签: c sockets file-descriptor

在C语言的套接字编程中,我在一个简单的客户端/服务器示例中看到,在调用socket()之前,将保存套接字文件描述符的int变量设置为0。

int fds;
fds = 0;
fds = socket (AF_INET, SOCK_DGRAM, 0);
if (fds == -1) {
     perror("Socket():");
     exit(-1);
}

这有什么理由吗?

2 个答案:

答案 0 :(得分:3)

不,没有。 socket将始终返回一个值。

答案 1 :(得分:1)

只要您在写入之前没有访问fds变量,就没有真正的理由。

但是,如果定义与分配之间存在一定距离,则将fds设置为“无效”值(例如-1)可能会很有用:

int fds = -1;
[ lots of code which might accidentally use fds ]
fds = socket (AF_INET, SOCK_DGRAM, 0);
if (fds == -1) {
     perror("Socket():");
     exit(-1);
}

现在,想象一下我在fdsint fds = -1;之间的代码中偶然使用fds = socket(...),因为无效使用,我肯定会收到错误。

另一方面,如果我没有将fds设置为-1,它可能有任何值,也许是我们流程中有效FD的值。如果我在这个文件上做read() - 或者更糟糕的是:写一个()`,我可能会以损坏的数据结构结束。