1

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

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

这有什么原因吗?

4

2 回答 2

3

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

于 2012-11-26T16:10:17.490 回答
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);
}

现在,想象一下我不小心在和fds之间的代码中使用了,由于使用无效,我肯定会得到一个错误。int fds = -1;fds = socket(...)

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

于 2012-11-26T16:10:09.187 回答